zoj2112
来源:互联网 发布:apache tomcat怎么安装 编辑:程序博客网 时间:2024/06/05 08:04
这道题是要求待修改的区间第k值,看的kuangbin的树状数组加主席树,这种方法是离线的。本来是想做hdu5412的,结果超时,所以只能交了zoj2110。没什么多说的,就是模板题。如果要求第k大,只要做相应的修改就行了,有多种修改的方法,只要能的出正确答案就行。
参考代码:http://www.cnblogs.com/kuangbin/p/3308118.html
(今天为了看书,没有吃包子,只吃了面包,本来想着反正有番茄酱,但是看到队友吃包子,还是各种口水流)
2015.8.31:
回忆了一下模板。但是写时还是要注意细节。不过只要理解了原理,什么时候都能写,就是时间长短的问题。今天中午买了一个包子,结果划卡划多了,结果又多给了一个,吃的那叫一个痛哭流涕(因为菜太辣了!)。
#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>using namespace std;#define N 50010#define M 10010#define Q 2600000struct querynode{ int type; int l; int r; int k;};int c[Q],lson[Q],rson[Q];int T[N],S[N],use[N];int newid[2*N];int num[N];bool usemark[N];querynode queryarray[M];int n,m;int tot;void lisanhua(){ sort(newid+1,newid+m+1); m=unique(newid+1,newid+m+1)-(newid+1);}int build(int l,int r){ int root=tot++; c[root]=0; if(l<r){ int middle=(l+r)>>1; lson[root]=build(l,middle); rson[root]=build(middle+1,r); } else{ lson[root]=-1; rson[root]=-1; } return root;}int insert(int froroot,int anum,int cou){ int root=tot++,temproot=root; int l=1,r=m; c[root]=c[froroot]+cou; while(l<r){ int middle=(l+r)>>1; if(anum<=middle){ r=middle; lson[temproot]=tot++; rson[temproot]=rson[froroot]; temproot=lson[temproot]; froroot=lson[froroot]; } else{ l=middle+1; lson[temproot]=lson[froroot]; rson[temproot]=tot++; temproot=rson[temproot]; froroot=rson[froroot]; } c[temproot]=c[froroot]+cou; } return root;}int numhash(int x){ return lower_bound(newid+1,newid+m+1,x)-newid;}int lowbit(int x){ return (~x+1)&x;}void modify(int x,int anum,int cou){ while(x<=n){ S[x]=insert(S[x],anum,cou); x=x+lowbit(x); }}int sum(int x){ int ans=0; while(x>0){ ans+=c[lson[use[x]]]; x=x-lowbit(x); } return ans;}int query(int left,int right,int k){ int l=1,r=m; int tempr=T[right],templ=T[left-1]; for(int i=right;i>0;i=i-lowbit(i)){ use[i]=S[i]; } for(int i=left-1;i>0;i=i-lowbit(i)){ use[i]=S[i]; } while(l<r){ int middle=(l+r)>>1; int cnt=sum(right)+c[lson[tempr]]-(sum(left-1)+c[lson[templ]]); if(cnt>=k){ r=middle; memset(usemark,false,sizeof(usemark)); for(int i=right;i>0;i=i-lowbit(i)){ use[i]=lson[use[i]]; usemark[i]=true; } for(int i=left-1;i>0;i=i-lowbit(i)){ if(!usemark[i]){ use[i]=lson[use[i]]; } } tempr=lson[tempr]; templ=lson[templ]; } else{ l=middle+1; memset(usemark,false,sizeof(usemark)); for(int i=right;i>0;i=i-lowbit(i)){ use[i]=rson[use[i]]; usemark[i]=true; } for(int i=left-1;i>0;i=i-lowbit(i)){ if(!usemark[i]){ use[i]=rson[use[i]]; } } tempr=rson[tempr]; templ=rson[templ]; k=k-cnt; } } return l;}int main(){ int t; int q; char op[10]; scanf("%d",&t); while(t--){ scanf("%d%d",&n,&q); for(int i=1;i<=n;i++){ scanf("%d",&num[i]); newid[i]=num[i]; } m=n; for(int i=0;i<q;i++){ scanf("%s",op); if(op[0]=='Q'){ queryarray[i].type=0; scanf("%d%d%d",&queryarray[i].l,&queryarray[i].r,&queryarray[i].k); } else{ queryarray[i].type=1; scanf("%d%d",&queryarray[i].l,&queryarray[i].r); newid[++m]=queryarray[i].r; } } tot=0; lisanhua(); T[0]=build(1,m); for(int i=1;i<=n;i++){ T[i]=insert(T[i-1],numhash(num[i]),1); } for(int i=1;i<=n;i++){ S[i]=T[0]; } for(int i=0;i<q;i++){ /*for(int i=1;i<=n;i++){ printf("%d ",num[i]); } printf("\n");*/ if(queryarray[i].type==0){ printf("%d\n",newid[query(queryarray[i].l,queryarray[i].r,queryarray[i].k)]); } else if(queryarray[i].type==1){ modify(queryarray[i].l,numhash(num[queryarray[i].l]),-1); modify(queryarray[i].l,numhash(queryarray[i].r),1); num[queryarray[i].l]=queryarray[i].r; } } } return 0;}
0 0
- zoj2112
- zoj2112
- zoj2112
- ZOJ2112 线段树+splay
- ZOJ2112-Dynamic Rankings
- zoj2112 Dynamic Rankings
- 【ZOJ2112】Dynamic Ranking(主席树)
- ZOJ2112(区间动态求第K大)
- ZOJ2112 Dynamic Rankings 线段树+平衡树
- 线段树套treap(ZOJ2112)
- zoj2112(单点修改区间第K小)
- zoj2112 Dynamic Rankings (主席树 || 树套树)
- 支持修改的主席树,例题:zoj2112
- ZOJ2112 Dynamic Rankings 解题报告【数据结构】【分块】
- ZOJ2112 Dynamic Ranking(线段树)
- [主席树]ZOJ2112 && BZOJ1901 Dynamic Rankings
- 【搞基数据结构】【树套树】ZOJ2112 Dynamic Rankings kth_number
- 【zoj2112】【线段树套平衡树】Dynamic Rankings
- ASP杂记
- Qt 中显示中文
- matlab遇到问题-矩阵索引值超维问题
- 数据库范式简析和举例
- iOS系统介绍
- zoj2112
- Unity Bug 修复系列
- 线段树
- HDU 4267 A Simple Problem with Integers(树状数组)
- 直方图规定化
- C++的三大特性封装 继承 多态的理解
- 有时间我就要写点书评
- 【NOI2015】【BZOJ4199】品酒大会
- excel笔记