并不对劲的bzoj3932: [CQOI2015]任务查询系统
传送门->
离线操作听上去很简单,遗憾的是它强制在线。
每个时刻可以看成可持久化线段树中的一个版本,而每一个版本的线段树维护的是值某一段区间且在这个版本对应的时刻出现的数之和。
会发现同一时刻可能会有很多个数插入,这时可以对每个点记录版本,版本相同就不用更新了。
注意空间问题,并不对劲的空间让并不对劲的人调了一年。
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iomanip>
#include<iostream>
#include<map>
#include<queue>
#include<stack>
#include<vector>
#define rep(i,x,y) for(register int i=(x);i<=(y);++i)
#define dwn(i,x,y) for(register int i=(x);i>=(y);--i)
#define re register
#define maxn 200010
#define mi ((l+r)>>1)
#define LL long long
using namespace std;
inline LL read()
{
LL x=0,f=1;
char ch=getchar();
while(isdigit(ch)==0 && ch!='-')ch=getchar();
if(ch=='-')f=-1,ch=getchar();
while(isdigit(ch))x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return x*f;
}
inline void write(re LL x)
{
LL f=0;char ch[20];
if(!x){puts("0");return;}
if(x<0){putchar('-');x=-x;}
while(x)ch[++f]=x%10+'0',x/=10;
while(f)putchar(ch[f--]);
putchar('\n');
}
LL tr[maxn<<6],rt[maxn],siz[maxn<<6],ls[maxn<<6],rs[maxn<<6],id[maxn<<6],pre=1,cnt=0;
LL s[maxn],e[maxn],p[maxn],ord[maxn],n,q,mt;
LL ti[maxn],ads[maxn],pla[maxn],num;
inline void pu(re LL nd){tr[nd]=tr[ls[nd]]+tr[rs[nd]],siz[nd]=siz[ls[nd]]+siz[rs[nd]];}
inline void build(re LL nd,re LL l,re LL r)
{
if(l==r){tr[nd]=siz[nd]=0;return;}
ls[nd]=++cnt,rs[nd]=++cnt;
build(ls[nd],l,mi),build(rs[nd],mi+1,r);
}
inline LL add(re LL nd,re LL l,re LL r,re LL idi,re LL x,re LL ad)
{
if(l==x&&r==x){tr[++cnt]=tr[nd]+ad,siz[cnt]=siz[nd]+((ad<0)?-1:1),id[cnt]=idi;return cnt;}
if(r<x||x<l)return nd;
LL lson=add(ls[nd],l,mi,idi,x,ad),rson=add(rs[nd],mi+1,r,idi,x,ad);
if(id[nd]!=idi)id[++cnt]=idi,nd=cnt;
ls[nd]=lson,rs[nd]=rson,pu(nd);
return nd;
}
inline LL ask(re LL nd,re LL l,re LL r,re LL k)
{
if(siz[nd]<=k)return tr[nd];
if(siz[ls[nd]]<k)return tr[ls[nd]]+ask(rs[nd],mi+1,r,k-siz[ls[nd]]);
else return ask(ls[nd],l,mi,k);
}
inline bool cmp(re LL x,re LL y){return p[x]<p[y];}
inline bool cmp2(re LL x,re LL y){return ti[x]<ti[y];}
int main()
{
n=read(),q=read();
rep(i,1,n)s[i]=read(),e[i]=read(),p[i]=read(),ord[i]=i;
rt[0]=++cnt;build(1,1,n);num=0;
sort(ord+1,ord+n+1,cmp);
rep(i,1,n){ti[++num]=s[ord[i]],ads[num]=p[ord[i]],pla[num]=i,ti[++num]=e[ord[i]]+1,ads[num]=-p[ord[i]],pla[num]=i;}
rep(i,1,num)ord[i]=i;
sort(ord+1,ord+num+1,cmp2);
rep(i,1,num)
{
if(ti[ord[i]]!=ti[ord[i-1]]){rt[ti[ord[i]]]=add(rt[ti[ord[i-1]]],1,n,ti[ord[i]],pla[ord[i]],ads[ord[i]]);}
else {add(rt[ti[ord[i]]],1,n,ti[ord[i]],pla[ord[i]],ads[ord[i]]);}
mt=max(mt,ti[ord[i]]);
}
int tmpt;
rep(j,0,mt)
{
if(rt[j]){tmpt=rt[j];continue;}
rt[j]=tmpt;
}
while(q--)
{
LL x=read(),a=read(),b=read(),c=read(),k=1+(pre*a+b)%c;
LL ans=ask(rt[x],1,n,k);
pre=ans;write(pre);
}
return 0;
}
/*
4 3
1 2 6
2 3 3
1 3 2
3 3 4
3 5 3 10
1 1 3 4
2 2 4 3
*/
因为十分开心,就把zhing火龙的图放上来了。
并不对劲的bzoj3932: [CQOI2015]任务查询系统的更多相关文章
- BZOJ3932 CQOI2015 任务查询系统 【主席树】
BZOJ3932 CQOI2015 任务查询系统 Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的任务用三元组(Si,Ei, ...
- BZOJ3932: [CQOI2015]任务查询系统 主席树
3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 4869 Solved: 1652[Submit][St ...
- [bzoj3932][CQOI2015]任务查询系统_主席树
任务查询系统 bzoj-3932 CQOI-2015 题目大意:最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的任务用三元组(Si,Ei,Pi)描述 ...
- [bzoj3932][CQOI2015][任务查询系统] (主席树)
Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si ...
- BZOJ3932[CQOI2015]任务查询系统——主席树
题目描述 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第E ...
- BZOJ3932: [CQOI2015]任务查询系统
传送门 真不知道我没学主席树之前是有什么勇气说自己高级数据结构以及学的七七八八了. 这道题应该也是算是主席树的经典运用. 刚开始脑抽了,想把(S,E,P)的处理直接在线用树状数组xjb搞搞算了.写完后 ...
- [BZOJ3932] [CQOI2015]任务查询系统(主席树 || 树状数组 套 主席树 + 差分 + 离散化)
传送门 看到这个题有个很暴力的想法, 可以每一个时间点都建一颗主席树,主席树上叶子节点 i 表示优先级为 i 的任务有多少个. 当 x 到 y 有个优先级为 k 的任务时,循环 x 到 y 的每个点, ...
- [BZOJ3932][CQOI2015]任务查询系统(差分+主席树)
题面 分析 对于一个区间修改(s,e,v),我们可以将它差分,这样就变成了单点修改s和e+1(s插入,t+1删除) 我们用主席树维护差分数组的前缀和,第i棵主席树维护区间[1,i]之间的所有差分值 那 ...
- BZOJ3932 CQOI2015 任务查询系统 - 主席树,离散化
记录下自己写错的地方吧 1. 区间可能有重复 2. 没有出现的坐标也要计入version (因为询问里可能会有) #include <bits/stdc++.h> using namesp ...
随机推荐
- NYOJ 203 三国志
三国志 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描述 <三国志>是一款很经典的经营策略类游戏.我们的小白同学是这款游戏的忠实玩家.现在他把游戏简化一下, ...
- ASP.NET MVC WebAPI请求
基础: 首先,先创建一个“ASP.NET 空Web应用程序” : 然后添加对 “System.Web.Http” 和 “System.Web.Http.WebHost” 的引用: 再添加对“Syste ...
- NYOJ-673悟空的难题~~水题~~
悟空的难题 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 自从悟空当上了齐天大圣,花果山上的猴子猴孙们便也可以尝到天上的各种仙果神酒,所以猴子猴孙们的体质也得到了很好的 ...
- POJ-Crazy tea party,很好的一道数学题~~~
Crazy tea party Time Limit: 1000MS Memory Limit: 10000K Description n participants of <& ...
- [POJ3041] Asteroids(最小点覆盖-匈牙利算法)
传送门 题意: 给一个N*N的矩阵,有些格子有障碍,要求我们消除这些障碍,问每次消除一行或一列的障碍,最少要几次. 解析: 把每一行与每一列当做二分图两边的点. 某格子有障碍,则对应行与列连边. ...
- [POJ2446] Chessboard(二分图最大匹配-匈牙利算法)
传送门 把所有非障碍的相邻格子彼此连一条边,然后求二分图最大匹配,看 tot * 2 + k 是否等于 n * m 即可. 但是连边不能重复,比如 a 格子 和 b 格子 相邻,不能 a 连 b ,b ...
- [NOI2003]Editor(块状链表)
传送门 看了看块状链表,就是数组和链表的合体. 看上去好高大尚,思想也很简单. 但是发现代码量也不是很小,而且代码理解起来也是费尽得很,倒不如splay用起来顺手. 在加上适用范围貌似不是特别广,所以 ...
- NodeJS仿WebApi路由
用过WebApi或Asp.net MVC的都知道微软的路由设计得非常好,十分方便,也十分灵活.虽然个人看来是有的太灵活了,team内的不同开发很容易使用不同的路由方式而显得有点混乱. 不过这不是重点, ...
- dpr——设备像素比(device pixel ratio)
设备像素比 = 物理像素 / 逻辑像素 1.物理像素 显示器上最小的物理显示单元(像素颗粒),在操作系统的调度下,每一个设备像素都有自己的颜色值和亮度值. 例如:手机大小固定,物理像素越高,画面越清晰 ...
- R-Tree空间索引算法的研究历程和最新进展分析
转自原文 R-Tree空间索引算法的研究历程和最新进展分析,2008 摘要:本文介绍了空间索引的概念.R-Tree数据结构和R-Tree空间索引的算法描述,并从R-Tree索引技术的优缺点对R-Tre ...