博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj1901:Zju2112 Dynamic Rankings
阅读量:5138 次
发布时间:2019-06-13

本文共 2213 字,大约阅读时间需要 7 分钟。

权值线段树套区间线段树的裸题,加了离散化就好了

或者也可以整体二分
代码(树套树):

#include
#include
#include
#include
using namespace std;void read(int &x) { char ch; bool ok; for(ok=0,ch=getchar(); !isdigit(ch); ch=getchar()) if(ch=='-') ok=1; for(x=0; isdigit(ch); x=x*10+ch-'0',ch=getchar()); if(ok) x=-x;}#define rg registerconst int maxn=1e5+10;int n,m,id,nmp[maxn*2],x[maxn],y[maxn],z[maxn],num,a[maxn],b[maxn*2],ls[maxn*20],rs[maxn*20],sum[maxn*20],rt[maxn*4];char op[maxn][3];struct segment_tree{ void update(int x){sum[x]=sum[ls[x]]+sum[rs[x]];} void change(int &k,int l,int r,int a,int b) { if(!k)k=++id;int mid=(l+r)>>1; if(l==r){sum[k]+=b;return ;} if(a<=mid)change(ls[k],l,mid,a,b); else change(rs[k],mid+1,r,a,b); update(k); } int get(int x,int l,int r,int a,int b) { if(!x)return 0;int mid=(l+r)>>1,ans=0; if(a<=l&&b>=r)return sum[x]; if(a<=mid)ans+=get(ls[x],l,mid,a,b); if(b>mid)ans+=get(rs[x],mid+1,r,a,b); return ans; }}s[maxn*4];map
mp;void change(int x,int l,int r,int a,int b,int c){ s[x].change(rt[x],1,n,a,c); if(l==r)return ;int mid=(l+r)>>1; if(b<=mid)change(x<<1,l,mid,a,b,c); else change(x<<1|1,mid+1,r,a,b,c);}int get(int x,int l,int r,int a,int b,int c){ if(l==r)return l;int mid=(l+r)>>1,now=s[x<<1].get(rt[x<<1],1,n,a,b); if(c<=now)return get(x<<1,l,mid,a,b,c); else return get(x<<1|1,mid+1,r,a,b,c-now);}int main(){ read(n),read(m);num=n; for(rg int i=1;i<=n;i++)read(a[i]),b[i]=a[i]; for(rg int i=1;i<=m;i++) { scanf("%s",op[i]+1),read(x[i]),read(y[i]); if(op[i][1]=='Q')read(z[i]); else b[++num]=y[i]; } sort(b+1,b+num+1);int tot=0; for(rg int i=1;i<=num;i++)if(b[i]!=b[i-1])mp[b[i]]=++tot,nmp[tot]=b[i]; for(rg int i=1;i<=n;i++)change(1,0,num,i,mp[a[i]],1); for(rg int i=1;i<=m;i++) { if(op[i][1]=='C') { change(1,0,num,x[i],mp[a[x[i]]],-1); a[x[i]]=y[i]; change(1,0,num,x[i],mp[a[x[i]]],1); } else printf("%d\n",nmp[get(1,0,num,x[i],y[i],z[i])]); }}

转载于:https://www.cnblogs.com/lcxer/p/10422040.html

你可能感兴趣的文章
ORACLE 最后表数据更新的时间
查看>>
常见公文——决定和请示
查看>>
提高UI设计效率的4个技巧
查看>>
【程序1】
查看>>
docker学习
查看>>
ZOJ 2750 Idiomatic Phrases Game(Dijkstra)
查看>>
shell 逐行比较两个文件的内容是否一样(行数相同)
查看>>
Notepad++运行快捷键的设置
查看>>
11.12
查看>>
cd 你的web根目录 删除所有的PHP文件
查看>>
androidimplementationxorg-server-1.12.1 for android done--xorg-server-1.12.1-issue.txt
查看>>
程序员去人才网待遇是最低??
查看>>
Java乔晓松-oracle的单行函数(日期函数和数字函数)
查看>>
Concurrency(Locking, Blocking and Row Versioning)
查看>>
the Linux Kernel: Traffic Control, Shaping and QoS
查看>>
RHCA学习笔记:RH442-Unit6 磁盘性能调整
查看>>
innodB的隐式锁
查看>>
php 即使客户端或者服务器断开(如关掉浏览器)脚本也可以继续执行
查看>>
由“大数据量Excel入库高效方式”瞥见“并联系统”之优势
查看>>
委托的N种写法,你喜欢哪种?
查看>>