BZOJ3932: [CQOI2015]任务查询系统(洛谷P3168)
2017-12-24 17:51
387 查看
主席树 差分
BZOJ题目传送门洛谷题目传送门
先利用差分,一个数出现在[s,e]等价于在s时刻把这个数的出现次数+1,在t+1时刻-1。
那么我们可以用主席树维护。记录sum表示子树大小,x表示子树优先级和,把优先级离散后就可以维护了。
注意细节。
代码:
#include<cctype> #include<cstdio> #include<cstring> #include<algorithm> #define N 100005 using namespace std; typedef long long LL; struct dt{ int t,p,x; }a[N*2]; struct tree{ int ls,rs,sum; LL x; }t[N*50]; int n,m,nd,num,rt ,b ; LL pre=1; inline char readc(){ static char buf[100000],*l=buf,*r=buf; if (l==r) r=(l=buf)+fread(buf,1,100000,stdin); if (l==r) return EOF; return *l++; } inline int _read(){ int x=0; char ch=readc(); while (!isdigit(ch)) ch=readc(); while (isdigit(ch)) x=x*10+ch-48,ch=readc(); return x; } bool cmp(dt x,dt y){ return x.t<y.t; } void ntlz(int &x,int l,int r){ t[x=++nd].sum=t[x].x=0; if (l==r) return; int mid=l+r>>1; ntlz(t[x].ls,l,mid),ntlz(t[x].rs,mid+1,r); } void build(int &x,int l,int r,int fa,int p,int w){ t[x=++nd].ls=t[fa].ls,t[x].rs=t[fa].rs; t[x].sum=t[fa].sum+w,t[x].x=t[fa].x+(LL)w*b[p]; if (l==r) return; int mid=l+r>>1; if (p<=mid) build(t[x].ls,l,mid,t[fa].ls,p,w); else build(t[x].rs,mid+1,r,t[fa].rs,p,w); } LL srch(int x,int l,int r,LL k){ if (k>=t[x].sum) return t[x].x; if (l==r) return t[x].x/t[x].sum*k; int ls=t[x].ls,df=t[ls].sum,mid=l+r>>1; if (df>=k) return srch(ls,l,mid,k); else return t[ls].x+srch(t[x].rs,mid+1,r,k-df);//记得加上左子树的权值 } int main(){ n=_read(),m=_read(); for (int i=1;i<=n;i++){ int s=_read(),t=_read(),p=b[i]=_read(); a[i*2-1]=(dt){s,p,1}; a[i*2]=(dt){t+1,p,-1}; } sort(b+1,b+n+1),sort(a+1,a+n*2+1,cmp); num=unique(b+1,b+n+1)-(b+1),ntlz(rt[0],1,num); for (int i=1;i<=n*2;i++){ int t=a[i].t,x=a[i].x; int p=lower_bound(b+1,b+num+1,a[i].p)-b; for (int j=a[i-1].t+1;j<t;j++) rt[j]=rt[j-1]; //当这个时刻没有任务开始时要把之前那个时刻的给copy过来 if (a[i].t!=a[i-1].t) build(rt[t],1,num,rt[t-1],p,x); //如果两个任务发生在同一时刻的话直接用同一个根 else build(rt[t],1,num,rt[t],p,x); } while (m--){ LL x=_read(),A=_read(),B=_read(),C=_read(); C=1+(A*pre+B)%C,pre=srch(rt[x],1,num,C); printf("%lld\n",pre); } return 0; }
相关文章推荐
- 洛谷P3168 [CQOI2015]任务查询系统
- 洛谷P3168 [CQOI2015]任务查询系统
- P3168 [CQOI2015]任务查询系统
- BZOJ3932: [CQOI2015]任务查询系统 可持久化线段树
- BZOJ3932: [CQOI2015]任务查询系统
- BZOJ3932: [CQOI2015]任务查询系统
- bzoj3932: [CQOI2015]任务查询系统
- 主席树练习5——P3168 [CQOI2015]任务查询系统
- BZOJ3932: [CQOI2015]任务查询系统
- BZOJ3932: [CQOI2015]任务查询系统
- Bzoj 3932: [CQOI2015]任务查询系统(主席树)
- BZOJ 3932 [CQOI2015]任务查询系统 ——可持久化线段树
- 【主席树】BZOJ3932-[CQOI2015]任务查询系统
- NKOJ3251 (CQOI2015) 任务查询系统(差分数组,主席树)
- bzoj 3932: [CQOI2015]任务查询系统(主席树)
- [CQOI2015]任务查询系统
- [bzoj3932][CQOI2015]任务查询系统_主席树
- BZOJ 3932 [CQOI2015]任务查询系统 可持久化线段树
- [CQOI2015]任务查询系统 (可持久化treap)
- [CQOI2015]任务查询系统