[BZOJ]3110: [Zjoi2013]K大数查询
来源:互联网 发布:马来西亚华人知乎 编辑:程序博客网 时间:2024/05/16 08:51
整体二分+BIT区间修改,区间查询
#include <cstdio>using namespace std;typedef long long int unt;inline char tc(void){ static char fl[100000],*A=fl,*B=fl; return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;}inline int read(void){ int a=0,f=1;static char c; while((c=tc())<'0'||c>'9')c=='-'?f=-1:0; while(c>='0'&&c<='9') a=a*10+c-'0',c=tc(); return a*f;}struct M{ int t,l,r,c,h;}s[50002],tl[50002],tr[50002];int n,m,ans[50002],o[50002],ll;unt c1[100010],c2[100010],x;inline void add(int x,int y){ for (int i=x;i<=1+2*n;i+=i&-i) c1[i]+=y,c2[i]+=x*y; return ;}inline unt sum(int x){ unt sum=0; for (int i=x;i;i-=i&-i) sum+=(x+1)*c1[i]-c2[i]; return sum;}void solve(int l,int r,int ql,int qr){ int mid=l+r+1>>1,w1=0,w2=0,rr=0; ll=0; if(l==r) { for (int i=ql;i<=qr;++i) ans[s[i].h]=l; return ; } for (int i=ql;i<=qr;++i) if(s[i].t==1) { if(s[i].c>=mid) add(s[i].l,1),add(s[i].r+1,-1),tr[++w2]=s[i]; else tl[++w1]=s[i]; } else { x=sum(s[i].r)-sum(s[i].l-1); if(x<s[i].c) s[i].c-=x,ll=1,tl[++w1]=s[i]; else tr[++w2]=s[i],rr=1; } for (int i=ql;i<=qr;++i) if(s[i].t==1) if(s[i].c>=mid) add(s[i].l,-1),add(s[i].r+1,1); for (int i=1;i<=w1;++i) s[ql+i-1]=tl[i]; for (int i=1;i<=w2;++i) s[ql+w1+i-1]=tr[i]; if(ll)solve(l,mid-1,ql,ql+w1-1);if(rr)solve(mid,r,ql+w1,qr); return ;}int main(void){ register int i; n=read(),m=read(); for (i=1;i<=m;++i) s[i].t=read(),s[i].l=read(),s[i].r=read(),s[i].c=read(),o[i]=s[i].t,s[i].t==1?s[i].c+=n+1:0,s[i].h=i; solve(1,n*2+1,1,m); for (i=1;i<=m;++i) if(o[i]==2) printf("%d\n",ans[i]-n-1); return 0;}
阅读全文
0 0
- BZOJ 3110 ZJOI2013 K大数查询 树套树
- BZOJ-3110-K大数查询-ZJOI2013-暴力
- bzoj 3110 [Zjoi2013]K大数查询
- BZOJ 3110 [Zjoi2013]K大数查询
- 【bzoj 3110】[Zjoi2013]K大数查询|树套树
- BZOJ 3110 [Zjoi2013]K大数查询
- 【34.14%】【BZOJ 3110】 [Zjoi2013]K大数查询
- [BZOJ]3110: [Zjoi2013]K大数查询
- BZOJ-3110-K大数查询-ZJOI2013-整体二分
- bzoj 3110: [Zjoi2013]K大数查询(树套树,整体二分)
- bzoj 3110: [Zjoi2013]K大数查询(树套树)
- [BZOJ]3110: [Zjoi2013]K大数查询 整体二分+线段树
- bzoj 3110 [Zjoi2013]K大数查询 整体二分
- 3110 [Zjoi2013]K大数查询
- 3110: [Zjoi2013]K大数查询
- 3110: [Zjoi2013]K大数查询
- 3110: [Zjoi2013]K大数查询
- 3110: [Zjoi2013]K大数查询
- 排序-归并排序-Java
- Oracle查询语句
- POJ2485 Kruscal
- *矩阵快速幂(斐波那契数列模板)
- GetMemory
- [BZOJ]3110: [Zjoi2013]K大数查询
- rabbitmq消息队列安装
- (C#)WPF保存图片,将图片提交到服务端进行保存
- 2017 计蒜之道初赛第三场 A.腾讯课堂的物理实验
- 初学JAVA003 认识Eclipse平台
- xml新手
- 读写配置文件
- 【React Native开发】
- 状态、缓存、映射