正解:主席树

解题报告:

传送门!

首先考虑如果是单点修改,那就是个线段树板子嘛$QwQ$

然后现在是区间修改,对于区间修改,显然就考虑差分下,就变成单点修改辣$QwQ$

同时单点查询前$k$小也就变成了区间查询前$k$小

于是就主席树套下就好$QwQ$

详细点儿说下趴$QwQ$.先考虑如果查询的不是前$k$小,而是问这个点的$\sum p$,怎么做$QwQ$?

就考虑先转化成单点修改,然后区间查询算出$[1,x]$的所有数之和就成$QwQ$

然后现在问前$k$小?于是就查询前$k$个数的和就成$QwQ$.

这里可能会有疑问?就说如果某个任务在这之前就结束了怎么把它的影响消去?就考虑在$t+1$这里把这个任务的收益和数量影响都减去就好

$over$

$attention$,这儿有个我认为比较有用的小结论,就经常可以利用查分等手段,将单点查询区间修改与区间查询单点修改这种之类的彼此之间转换$QwQ$

然后这个小结论事实上在树上也有一定的应用,之前省选前$yyb$出的$T2$,$zsy$港了一个不记得什么东西的方法可以不用树剖,,,好像是把单点修改和子树修改相转换,,,?不记得辽,,,我哭死$QAQ$,,,如果哪天又想起来了可能会去问问学长什么的趴,,,$QAQ$大概不会有那天的$QwQ$

昂当然这种还是有一定局限性的,但也确实是一种比较妙的方法辣,还是要多思考多掌握昂$QwQ$

#include<bits/stdc++.h>
using namespace std;
#define il inline
#define gc getchar()
#define ri register int
#define rb register bool
#define rc register char
#define rp(i,x,y) for(ri i=x;i<=y;++i)
#define my(i,x,y) for(ri i=x;i>=y;--i)
#define lb(x) lower_bound(st+1,st+1+sum,x)-st const int N=+;
int m,n,st[N],sum,rt[N],nod_cnt,pre=;
struct evt{int tim,p,w;}e[N<<];
struct node{int l,r,num,sum;}tr[N<<]; il int read()
{
rc ch=gc;ri x=;rb y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il bool cmp(evt gd,evt gs){return gd.tim<gs.tim;}
void modify(ri &nw,ri d,ri l,ri r,ri pos,ri num)
{
nw=++nod_cnt;tr[nw]=tr[d];ri mid=(l+r)>>;
if(l==r){tr[nw].sum+=st[pos]*num,tr[nw].num+=num;return;}
if(mid>=pos)modify(tr[nw].l,tr[d].l,l,mid,pos,num);else modify(tr[nw].r,tr[d].r,mid+,r,pos,num);
tr[nw].sum=tr[tr[nw].l].sum+tr[tr[nw].r].sum;tr[nw].num=tr[tr[nw].l].num+tr[tr[nw].r].num;
}
int query(ri nw,ri l,ri r,ri num)
{
if(tr[nw].num<=num)return tr[nw].sum;
if(l==r)return (tr[nw].sum/tr[nw].num)*num;
if(tr[tr[nw].l].num>=num)return query(tr[nw].l,l,(l+r)>>,num);
return tr[tr[nw].l].sum+query(tr[nw].r,((l+r)>>)+,r,num-tr[tr[nw].l].num);
} int main()
{
//freopen("3168.in","r",stdin);freopen("3168.out","w",stdout);
m=read();n=read();
rp(i,,m){ri s=read(),t=read()+,p=read();e[(i<<)-]=(evt){s,st[++sum]=p,};e[i<<]=(evt){t,p,-};}
sort(st+,st++sum);sum=unique(st+,st++sum)-st-;sort(e+,e+((m<<)|),cmp);
rp(i,,m<<){modify(rt[e[i].tim],rt[e[i-].tim],,sum,lb(e[i].p),e[i].w);}
rp(i,,n)if(!rt[i])rt[i]=rt[i-];
while(n--)
{
ri x=read(),a=read(),b=read(),c=read(),k=+(1ll*a*pre%c+b)%c;
printf("%d\n",pre=query(rt[x],,sum,k));
}
return ;
}

洛谷$P$3168 任务查询系统 $[CQOI2015]$ 主席树的更多相关文章

  1. 【BZOJ3932】任务查询系统(主席树)

    [BZOJ3923]任务查询系统(主席树) 题面 Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei ...

  2. BZOJ_3932_[CQOI2015]任务查询系统_主席树

    BZOJ_3932_[CQOI2015]任务查询系统_主席树 题意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,P ...

  3. ●洛谷P3168 [CQOI2015]任务查询系统

    题链: https://www.luogu.org/problemnew/show/P3168题解: 主席树 强制在线? 那就直接对每一个前缀时间建一个线段树(可持久化线段树),线段树维护优先度权值. ...

  4. 【洛谷 P3168】 [CQOI2015]任务查询系统(主席树)

    题目链接 被自己的sb错误调到自闭.. 主席树的进阶应用. 把\(P_i\)离散化一下,得到每个\(P_i\)的排名,然后建一棵维护\(m\)个位置的主席树,每个结点记录区间总和和正在进行的任务数. ...

  5. bzoj3932 / P3168 [CQOI2015]任务查询系统(主席树+差分)

    P3168 [CQOI2015]任务查询系统 看到第k小,就是主席树辣 对于每一段任务(a,b,k),在版本a的主席树+k,版本b+1的主席树-k 同一时间可能有多次修改,所以开个vector存操作, ...

  6. 2018.06.30 BZOJ 3932: [CQOI2015]任务查询系统(主席树)

    3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MB Description 最近实验室正在为其管理的超级计算机编制一套任务管理 ...

  7. 洛谷P2633 Count on a tree(主席树上树)

    题目描述 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权.其中lastans是上一个询问的答案,初始为0,即第一个 ...

  8. BZOJ3932 CQOI2015 任务查询系统 【主席树】

    BZOJ3932 CQOI2015 任务查询系统 Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的任务用三元组(Si,Ei, ...

  9. 洛谷P4587 [FJOI2016]神秘数(主席树)

    题面 洛谷 题解 考虑暴力,对于询问中的一段区间\([l,r]\),我们先将其中的数升序排序,假设当前可以表示出\([1,k]\)目前处理\(a_i\),假如\(a_i>k+1\),则答案就是\ ...

随机推荐

  1. python之 算法和数据结构

    什么是计算机科学? --首先明确的一点就是计算机科学不仅仅是对计算机的研究,虽然计算机在科学发展的过程中发挥了重大的作用,但是它只是一个工具,一个没有灵魂的工具而已,所谓的计算机科学实际上是对问题,解 ...

  2. HZOJ 寿司

    这题也是挺神仙的,现在O(n)的解法还没打出来,只是用O(nlogn)卡过去了(理论上可以过),sdfz某大佬用三分拿到了65分…… 考试连暴力都没打出来…… n2暴力T40: 首先将环拆成链,我们可 ...

  3. 如何查看redis内存使用情况

    https://jingyan.baidu.com/article/2c8c281dbd079f0008252a0f.html Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以 ...

  4. H3C 会话层、表示层和应用层

  5. H3C 帧中继显示与调试(续)

  6. element-ui隐藏组件el-scrollbar

    代码如下: <div class="main_wrapper"> <el-scrollbar wrapClass="scrollar_container ...

  7. Vue vue-resource三种请求数据方式pet,post,jsonp

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. HDU 1828“Picture”(线段树+扫描线求矩形周长并)

    传送门 •参考资料 [1]:算法总结:[线段树+扫描线]&矩形覆盖求面积/周长问题(HDU 1542/HDU 1828) •题意 给你 n 个矩形,求矩形并的周长: •题解1(两次扫描线) 周 ...

  9. P1101 走迷宫一

    题目描述 大魔王抓住了爱丽丝,将她丢进了一口枯井中,并堵住了井口. 爱丽丝在井底发现了一张地图,他发现他现在身处一个迷宫当中,从地图中可以发现,迷宫是一个N*M的矩形,爱丽丝身处迷宫的左上角,唯一的出 ...

  10. linux scull 中的设备注册

    在内部, scull 使用一个 struct scull_dev 类型的结构表示每个设备. 这个结构定义为: struct scull_dev { struct scull_qset *data;  ...