【权值分块】bzoj1861 [Zjoi2006]Book 书架
权值分块……rank3……没什么好说的。
- #include<cstdio>
- #include<cmath>
- #include<algorithm>
- using namespace std;
- int n,sz,sum,x,y,l[],r[],Min,Max,sumv[],num[],m,v[],p[];
- bool b[];
- char op[],c;
- int Num,CH[],f;
- inline void R(int &x){
- c=;f=;
- for(;c<''||c>'';c=getchar())if(c=='-')f=-;
- for(x=;c>=''&&c<='';c=getchar())(x*=)+=(c-'');
- x*=f;
- }
- inline void P(int x)
- {
- if(!x){putchar('');puts("");return;}
- if(x<){putchar('-');x=-x;}Num=;
- while(x>)CH[++Num]=x%,x/=;
- while(Num)putchar(CH[Num--]+);puts("");
- }
- void makeblock(const int &LIMIT)
- {
- sz=sqrt((double)LIMIT*0.9); if(!sz) sz=;
- for(sum=;sum*sz<LIMIT;++sum)
- {
- l[sum]=r[sum-]+;
- r[sum]=sum*sz;
- for(int i=l[sum];i<=r[sum];++i) num[i]=sum;
- }
- l[sum]=r[sum-]+;
- r[sum]=LIMIT;
- for(int i=l[sum];i<=r[sum];++i) num[i]=sum;
- }
- inline void Insert(const int &x){b[x]=; ++sumv[num[x]];}
- inline void Delete(const int &x){b[x]=; --sumv[num[x]];}
- inline int Next(const int &x)
- {
- for(int i=x+;i<=r[num[x]];++i) if(b[i]) return i;
- for(int i=num[x]+;;++i) if(sumv[i])
- for(int j=l[i];;++j)
- if(b[j]) return j;
- }
- inline int Pre(const int &x)
- {
- for(int i=x-;i>=l[num[x]];--i) if(b[i]) return i;
- for(int i=num[x]-;;--i) if(sumv[i])
- for(int j=r[i];;--j)
- if(b[j]) return j;
- }
- inline int Rank(const int &x)
- {
- int cnt=;
- for(int i=num[Min];i<num[x];++i) cnt+=sumv[i];
- for(int i=l[num[x]];i<x;++i) cnt+=b[i];
- return cnt;
- }
- inline int Kth(const int &x)
- {
- int cnt=;
- for(int i=num[Min];;++i)
- {
- cnt+=sumv[i];
- if(cnt>=x)
- {
- cnt-=sumv[i];
- for(int j=l[i];;++j)
- {cnt+=b[j]; if(cnt==x) return j;}
- }
- }
- }
- int main()
- {
- R(n); R(m); makeblock(n+(m<<));
- for(int i=;i<=n;++i)
- {
- R(v[i+m]);
- Insert(p[v[i+m]]=i+m);
- } Min=+m; Max=n+m;
- for(int i=;i<=m;++i)
- {
- scanf("%s",op); R(x);
- if(op[]=='T')
- {
- Delete(p[x]);
- v[p[x]=--Min]=x;
- Insert(Min);
- }
- else if(op[]=='B')
- {
- Delete(p[x]);
- v[p[x]=++Max]=x;
- Insert(Max);
- }
- else if(op[]=='I')
- {
- R(y); if(y==-)
- {
- swap(v[p[x]],v[Pre(p[x])]);
- swap(p[x],p[v[p[x]]]);
- }
- else if(y==)
- {
- swap(v[p[x]],v[Next(p[x])]);
- swap(p[x],p[v[p[x]]]);
- }
- }
- else if(op[]=='A') P(Rank(p[x]));
- else P(v[Kth(x)]);
- }
- return ;
- }
【权值分块】bzoj1861 [Zjoi2006]Book 书架的更多相关文章
- [BZOJ1861][Zjoi2006]Book 书架
[BZOJ1861][Zjoi2006]Book 书架 试题描述 小T有一个很大的书柜.这个书柜的构造有些独特,即书柜里的书是从上至下堆放成一列.她用1到n的正整数给每本书都编了号. 小T在看书的时候 ...
- 2019.01.08 bzoj3809: Gty的二逼妹子序列(莫队+权值分块)
传送门 题意:多组询问,问区间[l,r]中权值在[a,b]间的数的种类数. 看了一眼大家应该都知道要莫队了吧. 然后很容易想到用树状数组优化修改和查询做到O(mnlogamax)O(m\sqrt nl ...
- 2018.11.07 NOIP训练 L的鞋子(权值分块+莫队)
传送门 乱搞题. 我直接对权值分块+莫队水过了. 不过调了30min30min30min发现ststst表挂了是真的不想说什么233. 代码
- 【莫队算法】【权值分块】bzoj3920 Yuuna的礼物
[算法一] 暴力. 可以通过第0.1号测试点. 预计得分:20分. [算法二] 经典问题:区间众数,数据范围也不是很大,因此我们可以: ①分块,离散化,预处理出: <1>前i块中x出现的次 ...
- 【莫队算法】【权值分块】bzoj3585 mex
orz PoPoQQQ. 本来蒟蒻以为这种离散化以后就对应不起来的题不能权值分块搞的说. ……结果,实际上>n的权值不会对答案作出贡献. #include<cstdio> #incl ...
- 【带修莫队】【权值分块】bzoj3196 Tyvj 1730 二逼平衡树
这题用了三种算法写: 分块+二分:O(n*sqrt(n*log(n)) 函数式权值分块:O(n*sqrt(n)) 带修莫队+权值分块:O(n5/3) 结果……复杂度越高的实际上跑得越快……最后这个竟然 ...
- 【树链剖分】【函数式权值分块】bzoj1146 [CTSC2008]网络管理Network
裸题,直接上.复杂度O(n*sqrt(n)*log(n)). //Num[i]表示树中的点i在函数式权值分块中对应的点 //Map[i]表示函数式权值分块中的点i在树中对应的点 #include< ...
- 【莫队算法】【权值分块】bzoj2223 [Coci 2009]PATULJCI
不带修改主席树裸题<=>莫队+权值分块裸题. 复杂度O(m*sqrt(n)). P.S.题目描述坑爹,第二个数是权值的范围. #include<cstdio> #include ...
- 【函数式权值分块】【分块】bzoj3196 Tyvj 1730 二逼平衡树
#include<cstdio> #include<cmath> #include<algorithm> using namespace std; #define ...
随机推荐
- idea设置文件的编码格式
在打开某些类时会发现注释是乱码的,该如何解决idea的文件乱码呢?这就需要设置这个文件的合适编码格式: idea设置文件编码的两种方式分别如下: 第一种方式点击idea的右下角的图标如下图所示: 第二 ...
- [洛谷P2124] 奶牛美容
洛谷题目链接:奶牛美容 题目描述 输入输出格式 输入格式: 输出格式: 输入输出样例 输入样例#1: 6 16 ................ ..XXXX....XXX... ...XXXX... ...
- BZOJ 4206: 最大团
4206: 最大团 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 91 Solved: 36[Submit][Status][Discuss] De ...
- bzoj4430 [Nwerc2015]Guessing Camels赌骆驼
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4430 [题解] 把每只骆驼在第一个人.第二个人.第三个人的位置找出来,然后做三维偏序即可. ...
- 【洛谷 P3842】[TJOI2007]线段(DP)
裸DP.感觉楼下的好复杂,我来补充一个易懂的题解. f[i][0]表示走完第i行且停在第i行的左端点最少用的步数 f[i][1]同理,停在右端点的最少步数. 那么转移就很简单了,走完当前行且停到左端点 ...
- 滑杆(JSlider)和进度指示条(JProgressBar) 的使用
package first; import javax.swing.*; import javax.swing.border.TitledBorder; import java.awt.*; impo ...
- bzoj 2435 BFS
我们可以先将无根树变成有根树,随便选一个点当根就行了,我们选1,bfs求出来每个点 的size值,代表以它为根节点的子树中有多少个节点,(dfs可能会爆栈),然后再对于每一条 边算就好了 我tle了, ...
- kthread_create与kernel_thread的区别【栈】
转自:http://blog.chinaunix.net/uid-25513153-id-2888903.html kthread_create与kernel_thread的区别 kernel thr ...
- Spring容器整合WebSocket
原链接:http://blog.csdn.net/canot/article/details/52575054 WebSocker是一个保持web客户端与服务器长链接的技术.这样在两者通信过程中如果服 ...
- [ Openstack ] OpenStack-Mitaka 高可用之 镜像服务(glance)
目录 Openstack-Mitaka 高可用之 概述 Openstack-Mitaka 高可用之 环境初始化 Openstack-Mitaka 高可用之 Mariadb-Galera集群 ...