【CQOI2015】任务查询系统 主席树模板题

来源:互联网 发布:汽车设计软件下载 编辑:程序博客网 时间:2024/05/16 14:40

Description

这里写图片描述

Input

这里写图片描述

Output

n个整数表示答案

Sample Input

4 3
1 2 6
2 3 3
1 3 2
3 3 4
3 1 3 2
1 1 3 4
2 2 4 3

Sample Output

2
8
11

Data Constraint

这里写图片描述

Solution

由于优先级比较大,需要离散化
如果不强制在线,只需将询问按时间排序维护一个权值线段树即可
维护时枚举时刻,在一个任务开始的时刻,将这个任务的优先级加入线段树中然后询问,然后将在这个时刻结束的任务从线段树中删去

而强制在线就只需对于每个时刻开一棵权值线段树,维护的方法和上面相同
由于时刻很多,用主席树来维护就可以避免空间超限
当做主席树模板题

Code

#include<cstdio>#include<cstring>#include<algorithm>#include<cstring>#define fo(i,a,b) for(int i=a;i<=b;i++)#define N 101000#define ll long longusing namespace std;struct node{    int x,y,z;}a[N],b[N];struct note{    int l,r;    ll d1,d2;}t[N*100];int m,n,r[N],tot=0,nn=0;ll hy[N];bool cnt(node x,node y){return x.x<y.x;}bool cmt(node x,node y){return x.z<y.z;}void insert(int v,int i,int j,int x,ll y){    t[v].d1+=y;t[v].d2+=y*hy[x];if(i==j) return;    int m=(i+j)/2;    if(x<=m) t[++tot]=t[t[v].l],t[v].l=tot,insert(t[v].l,i,m,x,y);    else t[++tot]=t[t[v].r],t[v].r=tot,insert(t[v].r,m+1,j,x,y);}ll get(int v,int k){    if(k==0) return 0;    if(v==0) return 0;    if(t[t[v].l].d1==k) return t[t[v].l].d2;    if(t[t[v].l].d1>k) return get(t[v].l,k);    else return t[t[v].l].d2+get(t[v].r,k-t[t[v].l].d1);}int main(){    freopen("query.in","r",stdin);    freopen("query.out","w",stdout);    scanf("%d%d",&m,&n);    fo(i,1,m) scanf("%d%d%d",&b[i].x,&b[i].y,&b[i].z);    //------离散化    {        sort(b+1,b+m+1,cmt);        fo(i,1,m) hy[++nn]=b[i].z,b[i].z=nn;        fo(i,1,m)        {            a[i*2-1].x=b[i].x;a[i*2-1].y=1;a[i*2-1].z=b[i].z;            a[i*2].x=b[i].y+1;a[i*2].y=-1;a[i*2].z=b[i].z;        }    }    //------预处理    {        sort(a+1,a+m+m+1,cnt);        int j=1;        fo(i,1,n+1)        {            r[i]=++tot;t[r[i]]=t[r[i-1]];            for(;a[j].x==i;j++)             insert(r[i],1,nn,a[j].z,a[j].y);        }    }    //------query    ll ans=1;    fo(i,1,n)    {        int x;ll jy1,jy2,jy3;scanf("%d%lld%lld%lld",&x,&jy1,&jy2,&jy3);        ll k=(jy1*ans+jy2)%jy3+1;        if(t[r[x]].d1<=k) ans=t[r[x]].d2;        else ans=get(r[x],k);        printf("%lld\n",ans);    }}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 牛肉卤的太烂怎么办 牛肉炖得太软怎么办 牛肉炖的很硬怎么办 牛肉做的有点硬怎么办 牛肉做老了还能怎么办 牛肉粒 炒老了怎么办 牛肉炖出来很硬怎么办 煮的牛肉太硬怎么办 在产蛋鸡体重偏轻怎么办 产蛋鸡不上高峰怎么办 蛋鸡天热下蛋少怎么办 成年鸡嗉子鼓涨怎么办 黄牛拼失败了钱怎么办 磁力泥粘衣服上怎么办 鼻涕泥弄衣服上怎么办 水晶橡皮泥弄在衣服上怎么办 橡皮泥弄到衣服上怎么办 橡皮泥弄在衣服上怎么办 磁力泥弄衣服上怎么办 苹果7p按键坏了怎么办 苹果手机内存满了怎么办 来微信消息手机上面没提示怎么办 苹果手机储存空间满了怎么办 苹果六储存满了怎么办视频 微信听筒没声音怎么办 苹果手机有电自动关机怎么办 白玉蜗牛生蛋了怎么办 农民工工资拖欠怎么办没有合同 公司拖欠员工工资没签合同怎么办 东京去大阪乘大巴行李怎么办? 在外手机没电了怎么办 被公司起诉我该怎么办 支付宝付款刷脸怎么办 考到了差的中学怎么办 中学考高中没考上怎么办 如果考中学没有考上那怎么办 摩托车牌京b牌照怎么办 老公网贷还不了怎么办 丈夫欠下的债妻子怎么办 丈夫偷妻子的钱怎么办 刷信用卡显示不允许降级交易怎么办