首页 > 代码库 > AC日记——Dynamic Ranking 洛谷 P2617
AC日记——Dynamic Ranking 洛谷 P2617
Dynamic Ranking
思路;
可持久化树状数组;
代码:
#include <bits/stdc++.h>using namespace std;#define maxn 10005#define maxtot maxn*600struct QueryType { int l,r,k; char op[4];};struct QueryType qu[maxn];int n,m,ai[maxn],bi[maxn<<1],root[maxn];int posl[100],numl,posr[100],numr,lc[maxtot];int rc[maxtot],dis[maxtot],tot,cnt,size;inline void in(int &now){ char Cget=getchar();now=0; while(Cget>‘9‘||Cget<‘0‘) Cget=getchar(); while(Cget>=‘0‘&&Cget<=‘9‘) { now=now*10+Cget-‘0‘; Cget=getchar(); }}inline int lowbit(int x){ return x&(-x);}inline void add(int &now,int l,int r,int to,int x){ if(!now) now=++tot;dis[now]+=x; if(l==r) return;int mid=l+r>>1; if(to<=mid) add(lc[now],l,mid,to,x); else add(rc[now],mid+1,r,to,x);}inline void tree_add(int x,int to,int di){ while(x<=n) { add(root[x],1,size,to,di); x+=lowbit(x); }}inline void pre(int l,int r){ l--,numl=0,numr=0; while(r) posr[++numr]=root[r],r-=lowbit(r); while(l) posl[++numl]=root[l],l-=lowbit(l);}inline int query(int l,int r,int k){ if(l==r) return bi[l]; int di=0,mid=l+r>>1; for(int i=1;i<=numr;i++) di+=dis[lc[posr[i]]]; for(int i=1;i<=numl;i++) di-=dis[lc[posl[i]]]; if(k<=di) { for(int i=1;i<=numr;i++) posr[i]=lc[posr[i]]; for(int i=1;i<=numl;i++) posl[i]=lc[posl[i]]; return query(l,mid,k); } else { for(int i=1;i<=numr;i++) posr[i]=rc[posr[i]]; for(int i=1;i<=numl;i++) posl[i]=rc[posl[i]]; return query(mid+1,r,k-di); }}int main(){ in(n),in(m); for(int i=1;i<=n;i++) in(ai[i]),bi[++cnt]=ai[i]; for(int i=1;i<=m;i++) { scanf("%s",qu[i].op),in(qu[i].l),in(qu[i].r); if(qu[i].op[0]==‘Q‘) in(qu[i].k); else bi[++cnt]=qu[i].r; } sort(bi+1,bi+cnt+1),size=unique(bi+1,bi+cnt+1)-bi-1; for(int i=1;i<=n;i++) { ai[i]=lower_bound(bi+1,bi+size+1,ai[i])-bi; tree_add(i,ai[i],1); } for(int i=1;i<=m;i++) { if(qu[i].op[0]==‘Q‘) { pre(qu[i].l,qu[i].r); printf("%d\n",query(1,size,qu[i].k)); } else { qu[i].r=lower_bound(bi+1,bi+size+1,qu[i].r)-bi; tree_add(qu[i].l,ai[qu[i].l],-1); ai[qu[i].l]=qu[i].r; tree_add(qu[i].l,qu[i].r,1); } } return 0;}
AC日记——Dynamic Ranking 洛谷 P2617
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。