传送门->

离线操作听上去很简单,遗憾的是它强制在线。

每个时刻可以看成可持久化线段树中的一个版本,而每一个版本的线段树维护的是值某一段区间且在这个版本对应的时刻出现的数之和。

会发现同一时刻可能会有很多个数插入,这时可以对每个点记录版本,版本相同就不用更新了。

注意空间问题,并不对劲的空间让并不对劲的人调了一年。

#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]任务查询系统的更多相关文章

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

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

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

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

  3. [bzoj3932][CQOI2015]任务查询系统_主席树

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

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

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

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

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

  6. BZOJ3932: [CQOI2015]任务查询系统

    传送门 真不知道我没学主席树之前是有什么勇气说自己高级数据结构以及学的七七八八了. 这道题应该也是算是主席树的经典运用. 刚开始脑抽了,想把(S,E,P)的处理直接在线用树状数组xjb搞搞算了.写完后 ...

  7. [BZOJ3932] [CQOI2015]任务查询系统(主席树 || 树状数组 套 主席树 + 差分 + 离散化)

    传送门 看到这个题有个很暴力的想法, 可以每一个时间点都建一颗主席树,主席树上叶子节点 i 表示优先级为 i 的任务有多少个. 当 x 到 y 有个优先级为 k 的任务时,循环 x 到 y 的每个点, ...

  8. [BZOJ3932][CQOI2015]任务查询系统(差分+主席树)

    题面 分析 对于一个区间修改(s,e,v),我们可以将它差分,这样就变成了单点修改s和e+1(s插入,t+1删除) 我们用主席树维护差分数组的前缀和,第i棵主席树维护区间[1,i]之间的所有差分值 那 ...

  9. BZOJ3932 CQOI2015 任务查询系统 - 主席树,离散化

    记录下自己写错的地方吧 1. 区间可能有重复 2. 没有出现的坐标也要计入version (因为询问里可能会有) #include <bits/stdc++.h> using namesp ...

随机推荐

  1. NYOJ660逃离地球——只为最大存活率~

    逃离地球 时间限制:1000 ms  |  内存限制:65535 KB 难度: 描述 据霍金的<时间简史>所述,在几亿年之后将再次发生宇宙大爆炸.在宇宙大爆炸后,地球上将新生出许多生物而不 ...

  2. hust训练赛20160330--B - 又见LKity

    Problem 2122 又见LKity Time Limit: 1000 mSec Memory Limit : 32768 KB  Problem Description 嗨!大家好,在Templ ...

  3. Codechef May Challenge 2015

    随便瞎写,其实没做出多少题: Chef and Cake 题目大概是用输入的数生成 一个数组并且生成出q个[X,Y]的询问, 数组长度N<=1000000,q<=10^7; 开始用线段树, ...

  4. jenkins的代理设置,方便下载插件

    jenkins在下载插件的时候,总是网络不通,需要设置代理跨越长城 java.net.SocketTimeoutException: connect timed out Caused: java.ne ...

  5. SQLAlchemy的group_by和order_by的区别

    1.官网解释: group_by(*criterion) apply one or more GROUP BY criterion to the query and return the newly ...

  6. zookeeper客户端

    查看具体结点信息 bash zkServer.sh status 查看哪个结点被选作leader或者followerecho stat|nc 127.0.0.1 2181 测试是否启动了该Server ...

  7. Linux下的lds链接脚本简介(一)

    转载自:http://linux.chinaunix.net/techdoc/beginner/2009/08/12/1129972.shtml 一. 概论 每一个链接过程都由链接脚本(linker ...

  8. dhcp 过程

    The Question SuperUser reader Sagnik Sarkar wants to know what the difference between 127.0.0.1 and ...

  9. JavaScript Prototype in Plain Language

    非常好的文章: http://javascriptissexy.com/javascript-prototype-in-plain-detailed-language/ jan. 25 2013 14 ...

  10. CentOS 更改Apache默认网站目录

    http://www.osyunwei.com/archives/789.html引言:Apache默认的网站目录是在/var/www/html, 现在要把网站目录更改到/home/wwwroot/w ...