[jzoj]3542. 【清华集训2014】冒泡排序(树状数组+读入/输出优化+思维)
来源:互联网 发布:淘宝小号申请 编辑:程序博客网 时间:2024/06/05 11:19
Problem
对一个
Data constraint
n<=10^6,k<=10^12
Solution
一个比较显然的结论:
一个数
x 前如果有t 个比它大的数,那么前t 轮它一定是每一轮都往前移一格.t 轮之后,它就有可能往后移了.
那么我们依此可以算出每一轮有多少个数会往前移
也依此可以求出刚好到第几轮交换次数不会超过
k 求出轮数
t 之后.如何求
t 轮之后的序列呢?【方法一:并查集】
我们现在要做的是把
t 轮之后的每个数放到对应位置比如一个数本来需要往前
x 步,当x<=t 时,我们可以直接往前移当
x>t 时,这时会发现它会往后走,那么此时,我的想法就是先不理它先把那些不可能往后走的填了
即从按权值小到大填,一开始先填1对应应该放到的位置,这个很显然可以算出来
然后我们再看2应该填的位置,如果它与1填的位置冲突了,就把它往后拉一个
往后拉这一动作我们使用并查集,就可以在一个玄学的时间复杂度内解决这道题.
注意,如果直接递归会爆栈,所以打C++对于递归一定要敏感.
【方法二:找结论】
首先,我们可以确定的是那些
x<=t 的对于所有
x>t 的,可以发现它们是有序的,因为如果前面有一个数比它大,它都不可能往后移.非常简单高效.
求出每一个数前面有多少个数比它大我们可以用树状数组
【树状数组的引入】
优点是常数小,易理解
【单点修改update】
MainTain:lowbit(x)
每一次都是把
x−>x+lowbit(x)
【区间查询find】
- 与单点修改一样,我们每一次都是把
x−>x−lowbit(x)
- 与单点修改一样,我们每一次都是把
阅读全文
0 0
- [jzoj]3542. 【清华集训2014】冒泡排序(树状数组+读入/输出优化+思维)
- [jzoj]3541. 【清华集训2014】破冰派对(组合数+思维)
- JZOJ 3547【清华集训2014】mex
- jzoj 3547. 【清华集训2014】mex 分块+莫队算法
- jzoj3542 【清华集训2014】冒泡排序 (又是性质+半构造)
- 冒泡排序(优化版)的比较次数和交换数字次数 逆序数+树状数组
- 【冒泡排序】树状数组 & 结论
- 【JZOJ 5295】【清华集训2017模拟】Create
- 【JZOJ 5296】【清华集训2017模拟】Sequence
- JZOJ 3.10 1542——跑步(树状数组+模拟+排序/归并排序)
- 树状数组------冒泡排序的交换次数
- 读入优化&输出优化
- [jzoj]5484. 【清华集训2017模拟11.26】快乐树(树形DP)
- 【JZOJ 5495】【清华集训2017模拟12.09】MiniumCut(最小割树)
- 【JZOJ 3542】 冒泡排序
- 【清华集训2014】mex
- 【清华集训2014】mex
- 【清华集训2014】mex
- java 23种设计模式之 迭代器模式(cursor模式)GOF 23-1
- oj粉丝与分割平面
- 程序中的栈、堆、静态存储区
- 对于 红外遥控的信号处理 每一个按键都会有单独的操作【Arduino】
- 【离散数学】1.5可数集合与不可数集合
- [jzoj]3542. 【清华集训2014】冒泡排序(树状数组+读入/输出优化+思维)
- python里使用enum库枚举类型的迭代
- 树的一些简单又重要的概念
- redis分步式锁(上)
- linux下go环境变量配置
- Linux常用指令
- 已知/tmp目录下已经存在了test.txt文件,如何执行命令才能把/mnt/test.txt拷贝到/tmp下覆盖掉/tmp/test.txt,而让linux系统不提示是否覆盖(root权限下)
- 今天的题
- Maven的filtering和profile标签使用