正解:主席树
解题报告:
首先考虑如果是单点修改,那就是个线段树板子嘛$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]$ 主席树的更多相关文章
-
【BZOJ3932】任务查询系统(主席树)
[BZOJ3923]任务查询系统(主席树) 题面 Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei ...
-
BZOJ_3932_[CQOI2015]任务查询系统_主席树
BZOJ_3932_[CQOI2015]任务查询系统_主席树 题意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,P ...
-
●洛谷P3168 [CQOI2015]任务查询系统
题链: https://www.luogu.org/problemnew/show/P3168题解: 主席树 强制在线? 那就直接对每一个前缀时间建一个线段树(可持久化线段树),线段树维护优先度权值. ...
-
【洛谷 P3168】 [CQOI2015]任务查询系统(主席树)
题目链接 被自己的sb错误调到自闭.. 主席树的进阶应用. 把\(P_i\)离散化一下,得到每个\(P_i\)的排名,然后建一棵维护\(m\)个位置的主席树,每个结点记录区间总和和正在进行的任务数. ...
-
bzoj3932 / P3168 [CQOI2015]任务查询系统(主席树+差分)
P3168 [CQOI2015]任务查询系统 看到第k小,就是主席树辣 对于每一段任务(a,b,k),在版本a的主席树+k,版本b+1的主席树-k 同一时间可能有多次修改,所以开个vector存操作, ...
-
2018.06.30 BZOJ 3932: [CQOI2015]任务查询系统(主席树)
3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MB Description 最近实验室正在为其管理的超级计算机编制一套任务管理 ...
-
洛谷P2633 Count on a tree(主席树上树)
题目描述 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权.其中lastans是上一个询问的答案,初始为0,即第一个 ...
-
BZOJ3932 CQOI2015 任务查询系统 【主席树】
BZOJ3932 CQOI2015 任务查询系统 Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的任务用三元组(Si,Ei, ...
-
洛谷P4587 [FJOI2016]神秘数(主席树)
题面 洛谷 题解 考虑暴力,对于询问中的一段区间\([l,r]\),我们先将其中的数升序排序,假设当前可以表示出\([1,k]\)目前处理\(a_i\),假如\(a_i>k+1\),则答案就是\ ...
随机推荐
-
使用rowid抽取数据方法以及大数据量游标卡住的应对
平时工作的时候,经常会遇到这种事情,从一个大表A中,抽取字段a在一个相对较小B的表的数据,比如,从一个详单表中,抽取几万个用户号码的话单出来.这种时候,一般来说, 做关联查询: create tabl ...
-
【转】使用Python matplotlib绘制股票走势图
转载出处 一.前言 matplotlib[1]是著名的python绘图库,它提供了一整套绘图API,十分适合交互式绘图.本人在工作过程中涉及到股票数据的处理如绘制K线等,因此将matplotlib的使 ...
-
Maven学习总结(二)——Maven项目构建过程练习_转载
上一篇只是简单介绍了一下maven入门的一些相关知识,这一篇主要是体验一下Maven高度自动化构建项目的过程 一.创建Maven项目 1.1.建立Hello项目 1.首先建立Hello项目,同时建立M ...
-
Maven使用笔记,错误Failure to Transfer后处理
当有未更新成功的项,M3会以后缀为.lastUpdated保存未更新成功的项 执行下面的操作可清楚这些项 Unixfind ~/.m2 -name "*.lastUpdated" ...
-
linux 相关学习记录
(一)概念① 物理CPU实际Server中插槽上的CPU个数物理cpu数量,可以数不重复的 physical id 有几个② 逻辑CPU /proc/cpuinfo 用来存储cpu硬件信息的信息内容分 ...
-
如何在VMware虚拟机间建立共享磁盘?
在同一台电脑上,有时难免要安装多个虚拟机,存储空间就成了最大的问题,那么如何解决虚拟机的硬盘问题呢,Vmware自带的工具可以很好的解决此问题,下面我们就来看看如何在Vmware虚拟机间建立共享磁盘? ...
-
JQuery与DOM中的区别
一.Query与DOM的区别 1.页面加载: DOM:window.onload=function(){}; JQuery:$(function(){ }); 2.获取对象:JQuery中有“#” D ...
-
response对象详解
(响应 javax.servlet.http.HttpServletResponse) 方法名 说明 addCookie 添加一个Cookie对象 addHeader 添加Http文件指定名字头信息 ...
-
RHCA学习笔记:RH442-Unit8进程与调度
UNIT 8 Processes and the Scheduler 进程与调度 学习目标 A. CPU cache 与Service time之间的关系 B. 分析应用程序使用CPU cach ...
-
editplus的设置
1, 下载editplus3软件并且进行安装, 我这里是 EditPlus_3.4.1.1123_XiaZaiBa 2, 进行相关设置: 工具-->参数设置-->常规--勾选 (把Edit ...