洛谷$P$3168 任务查询系统 $[CQOI2015]$ 主席树
正解:主席树
解题报告:
首先考虑如果是单点修改,那就是个线段树板子嘛$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\),则答案就是\ ...
随机推荐
- ImportError: No module named tensorflow.compat.v1 忽略已经安装的某个包版本 忽略已安装版本
ImportError: No module named tensorflow.compat.v1 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声 ...
- @codeforces - 414E@ Mashmokh's Designed Problem
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一棵 n 个点的树,每个点的儿子是有序的. 现给定 m 次操 ...
- @雅礼集训01/10 - T1@ matrix
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个矩阵.求它的所有子矩阵中本质不同的行的个数之和. inp ...
- uni-app原生导航栏使用iconfont图标
在 iconfont 将图标下载之后,会有一个 .ttf 后缀的文件 把它放进 static 文件夹里 然后打开在iconfont下载的 demo_index.html 文件 选择 Unicode ...
- mysql统计信息相关
最近RDS FOR MYSQL5.6的统计信息有问题,一些表明明的数据,但统计信息里去显示为空表,导致执行计划出错,查询效率很低,所以查看下相关的信息. -- 查看服务器系统变量,实际上使用的变量的值 ...
- 2018-8-10-UWP-WPF-解决-xaml-设计显示异常
title author date CreateTime categories UWP WPF 解决 xaml 设计显示异常 lindexi 2018-08-10 19:16:53 +0800 201 ...
- torch.optim优化算法理解之optim.Adam()
torch.optim是一个实现了多种优化算法的包,大多数通用的方法都已支持,提供了丰富的接口调用,未来更多精炼的优化算法也将整合进来. 为了使用torch.optim,需先构造一个优化器对象Opti ...
- SuperSocket命令和命令加载器
关键字: 命令, 命令加载器, 多命令程序集 命令 (Command) SuperSocket 中的命令设计出来是为了处理来自客户端的请求的, 它在业务逻辑处理之中起到了很重要的作用. 命令类必须实现 ...
- Python--day71--Cookie和Session
一.Cookie Cookie图示: 二.Session 引用:http://www.cnblogs.com/liwenzhou/p/8343243.html cookie Cookie的由来 大家都 ...
- Vue 循环为选中的li列表添加效果
<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>Vu ...