P3168 [CQOI2015]任务查询系统

看到第k小,就是主席树辣

对于每一段任务(a,b,k),在版本a的主席树+k,版本b+1的主席树-k

同一时间可能有多次修改,所以开个vector存操作,再开个数组ti[p]保存时间点p最终的版本号

注意long long

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
typedef long long ll;
inline int Abs(int a){return a<?-a:a;}
inline int Max(int a,int b){return a>b?a:b;}
#define N 100005
#define W 20000005
int n,m,mx,u,tot,ti[N],rt[W],lc[W],rc[W],siz[W];
ll s[W],Pre=;
vector <int> g[N];
#define mid (l+r)/2
void Ins(int &o,int p,int l,int r,int v){
o=++u; siz[o]=siz[p]+(v>?:-); s[o]=s[p]+v;
if(l==r) return ;
if(Abs(v)<=mid) rc[o]=rc[p],Ins(lc[o],lc[p],l,mid,v);
else lc[o]=lc[p],Ins(rc[o],rc[p],mid+,r,v);
}
ll Ask(int o,int l,int r,int k){
if(l==r) return 1ll*l*k;
if(siz[lc[o]]>k) return Ask(lc[o],l,mid,k);
else return s[lc[o]]+Ask(rc[o],mid+,r,k-siz[lc[o]]);
}
int main(){
register int i,j; int q1,q2,q3,q4;
scanf("%d%d",&n,&m);
for(i=;i<=n;++i){
scanf("%d%d%d",&q1,&q2,&q3);
g[q1].push_back(q3);
g[q2+].push_back(-q3);
mx=Max(mx,q3);
}
for(i=;i<=n;++i){
for(j=g[i].size()-;j>=;--j)
++tot,Ins(rt[tot],rt[tot-],,mx,g[i][j]);
ti[i]=tot;
}
for(i=;i<=m;++i){
scanf("%d%d%d%d",&q1,&q2,&q3,&q4);
q2=+(q2*Pre+q3)%q4; q1=rt[ti[q1]];
Pre=q2<siz[q1]?Ask(q1,,mx,q2):s[q1];
printf("%lld\n",Pre);
}return ;
}

bzoj3932 / P3168 [CQOI2015]任务查询系统(主席树+差分)的更多相关文章

  1. 【BZOJ3932】[CQOI2015]任务查询系统 主席树

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

  2. 洛谷P3168 [CQOI2015]任务查询系统 [主席树,差分]

    题目传送门 任务查询系统 题目描述 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任 ...

  3. BZOJ.3932.[CQOI2015]任务查询系统(主席树 差分)

    题目链接 对于这一区间的操作,我们可以想到差分+前缀和(感觉也没什么别的了..). 同时对于本题我们能想到主席树,而主席树正是利用前一个节点建树的. 所以离散化.按时间排序,把操作拆成单点加和减即可. ...

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

    题目描述 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第Ei ...

  5. BZOJ3932: [CQOI2015]任务查询系统 主席树

    3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 4869  Solved: 1652[Submit][St ...

  6. [CQOI2015]任务查询系统 主席树

    [CQOI2015]任务查询系统 LG传送门 以前还没见过主席树的这种写法. 考虑使用差分的思想处理每一个任务,然后所有的东西就都能顺理成章地用主席树维护了,查询的时候和平时的主席树有一点不同,详见代 ...

  7. bzoj 3932: [CQOI2015]任务查询系统 -- 主席树 / 暴力

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

  8. BZOJ 3932: [CQOI2015]任务查询系统 (主席树板题)

    就是裸的主席树,差分之后排序插入主席树就行了. 注意主席树查询的时候叶子节点要特判,因为本身是有size的 还有要开longlong CODE #include <cctype> #inc ...

  9. BZOJ3932[CQOI2015]任务查询系统——主席树

    题目描述 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第E ...

随机推荐

  1. 石子合并(区间DP经典例题)

    题目链接:https://www.luogu.org/problemnew/show/P1880 #include <cstdio> #include <cmath> #inc ...

  2. Css3动画属性总汇

    http://css3lib.alloyteam.com/uilib/animation/demo1/#cta Css3动画属性总汇 Stay hungry. Stay foolish. Attent ...

  3. leetcode 300最长上升子序列

    用递归DFS遍历所有组合肯定积分会超时,原因是有很多重复的操作,可以想象每次回溯后肯定会有重复操作.所以改用动态规划.建立一个vector<int>memo,初始化为1,memo[i]表示 ...

  4. ASP.Net Core 2.2 MVC入门到基本使用系列 (一)(转)

    本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力. 本教程知识点大体 ...

  5. time_t time()

    time_t  atime,  btime; time(&atime); btime = time(0); 两种方式效果一样.

  6. ZOJ 3690 Choosing number(矩阵)

    Choosing number [题目链接]Choosing number [题目类型]矩阵 &题解: 这题就和已经dp极像了,所以找方程就很困难了.可以这样找: 设f(n)是前n-1个人已经 ...

  7. js执行上下文

    js在执行是会有一个“准备工作”: 主要内容有 1.变量.函数表达式——>变量声明,默认赋值为undefined: 2.this——>赋值: 3.函数声明——>赋值: 这三种数据的准 ...

  8. 014-Session服务器状态保持

    开始并为Session赋值:Session[“uName”]=“CNYaoMing”;取值:string strName = Session[“uName”].ToString();销毁(取消/退出) ...

  9. notepad去掉空行

    选择替换,把查找模式设置为正则表达式,在查找框中自己输入 ^\s+  ,替换框留空,点“全部替换”,即可(先全选).注意:不要复制我的,自己输入,且用英文格式输入.

  10. spring boot 知识点

    spring boot 好处 1. 简化配置,spring boot 提供了默认配置 例如 日志 默认logback日志  info级别 2. 简化部署,内嵌容器,tomcat,jetty,直接部署j ...