首页 > 代码库 > 【bzoj3932】 CQOI2015—任务查询系统
【bzoj3932】 CQOI2015—任务查询系统
http://www.lydsy.com/JudgeOnline/problem.php?id=3932 (题目链接)
题意
给出$m$个区间,每个区间有一个权值,$n$组询问,每次询问在位置$x$权值前$k$大的区间的权值和。
Solution
扫描线搞一下然后主席树维护即可。
细节
查询的时候注意叶子节的情况
代码
// bzoj3932#include<algorithm>#include<iostream>#include<cstdlib>#include<cstring>#include<cstdio>#include<cmath>#define LL long long#define lim 10000000#define inf 2147483640#define Pi acos(-1.0)#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout)using namespace std;const int maxn=200010;int n,m,sz,rt[maxn];struct data { int pos,w,op; friend bool operator < (data a,data b) {return a.pos<b.pos;}}t[maxn];struct node { int son[2],s;LL val; int& operator [] (int x) {return son[x];}}tr[maxn*50];namespace Chairtree { void insert(int &u,int v,int l,int r,int val,int op) { if (!u) u=++sz; if (l==r) {tr[u].s=tr[v].s+op;tr[u].val=tr[u].s*l;return;} int mid=(l+r)>>1; if (val<=mid) insert(tr[u][0],tr[v][0],l,mid,val,op),tr[u][1]=tr[v][1]; else insert(tr[u][1],tr[v][1],mid+1,r,val,op),tr[u][0]=tr[v][0]; tr[u].s=tr[tr[u][0]].s+tr[tr[u][1]].s; tr[u].val=tr[tr[u][0]].val+tr[tr[u][1]].val; } LL query(int k,int l,int r,int x) { if (!k) return 0; if (l==r) return (LL)l*x; int mid=(l+r)>>1,c=tr[tr[k][0]].s; if (x==c) return tr[tr[k][0]].val; else if (x<c) return query(tr[k][0],l,mid,x); else return query(tr[k][1],mid+1,r,x-c)+tr[tr[k][0]].val; }}using namespace Chairtree;int main() { scanf("%d%d",&m,&n); for (int u,v,w,i=1;i<=m;i++) { scanf("%d%d%d",&u,&v,&w); t[(i<<1)-1]=(data){u,w,1}; t[i<<1]=(data){v+1,w,-1}; } sort(t+1,t+1+m*2); for (int i=1,p=1;i<=m<<1;i++,p++) { for (;p<t[i].pos;p++) rt[p]=rt[p-1]; insert(rt[p],rt[p-1],1,lim,t[i].w,t[i].op); while (t[i+1].pos==t[i].pos) { int tmp=0;i++; insert(tmp,rt[p],1,lim,t[i].w,t[i].op); rt[p]=tmp; } } LL ans=1; for (int x,k,i=1;i<=n;i++) { LL a,b,c; scanf("%d%lld%lld%lld",&x,&a,&b,&c); k=1+(a*ans+b)%c; ans=query(rt[x],1,lim,k); printf("%lld\n",ans); } return 0;}
【bzoj3932】 CQOI2015—任务查询系统
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。