BZOJ 3932 [CQOI2015]任务查询系统 ——可持久化线段树
【题目分析】
主席树,维护区间大小以及权值之和。
但是细节确实要琢磨很久,WA了几次。
【代码】
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <set>
#include <map>
#include <string>
#include <algorithm>
#include <vector>
#include <iostream>
#include <queue>
using namespace std;
#define maxn 300005
#define mlog 40
#define inf (0x3f3f3f3f)
#define ll long long
ll read()
{
ll x=0,f=1; char ch=getchar();
while (ch<'0'||ch>'9') {if (ch=='-') f=-1; ch=getchar();}
while (ch>='0'&&ch<='9') {x=x*10+ch-'0'; ch=getchar();}
return x*f;
}
ll llread()
{
ll x=0,f=1; char ch=getchar();
while (ch<'0'||ch>'9') {if (ch=='-') f=-1; ch=getchar();}
while (ch>='0'&&ch<='9') {x=x*10+ch-'0'; ch=getchar();}
return x*f;
}
ll rt[maxn],ls[maxn*mlog],rs[maxn*mlog],siz[maxn*mlog],tot=0,n,m;
struct eve{ll p,opt;}a[maxn];
vector <eve> v[maxn];
ll sum[maxn*mlog];
ll b[maxn],top=0,cnt=0;
ll pre=1;
/*
void ins(ll o1,ll &o2,ll l,ll r,ll x,ll f)
{
o2=++tot;
siz[o2]=siz[o1]+f;
sum[o2]=sum[o2]+(ll)b[x]*f;
if (l==r) return ;
ll mid=(l+r)/2;
if (x<=mid) ins(ls[o1],ls[o2],1,mid,x,f),rs[o2]=rs[o1];
else ins(rs[o1],rs[o2],mid+1,r,x,f),ls[o2]=ls[o1];
// sum[o2]=sum[ls[o1]]+sum[ls[o2]];
}
*/
ll ins (ll o1,ll l,ll r,ll x,ll f)
{
ll now=++tot;
siz[now]=siz[o1]+f;
sum[now]=sum[o1]+b[x]*f;
if (l==r) return now;
ll mid=(l+r)/2;
if (x<=mid) ls[now]=ins(ls[o1],l,mid,x,f),rs[now]=rs[o1];
else rs[now]=ins(rs[o1],mid+1,r,x,f),ls[now]=ls[o1];
return now;
}
ll query(ll o,ll l,ll r,ll x)
{
if (x>=siz[o]) return sum[o];
if (l==r) return min(x,siz[o])*b[l];
ll tmp=siz[ls[o]];
if (tmp>=x) return query(ls[o],l,(l+r)/2,x);
else return sum[ls[o]]+query(rs[o],(l+r)/2+1,r,x-tmp);
}
int main()
{
n=read();m=read();
for (ll i=1;i<=n;++i)
{
ll x=read(),y=read(),z=read();
if (x<=m)
{
a[++cnt].p=z;
a[cnt].opt=1;
v[x].push_back(a[cnt]);
}
if (y+1<=m)
{
a[++cnt].p=z;
a[cnt].opt=-1;
v[y+1].push_back(a[cnt]);
}
b[++top]=z;
}
sort(b+1,b+top+1);
top=unique(b+1,b+top+1)-b-1;
for (ll i=1;i<=m;++i)
{
rt[i]=rt[i-1];
for (ll j=0;j<v[i].size();++j)
rt[i]=ins(rt[i],1,top,lower_bound(b+1,b+top+1,v[i][j].p)-b,v[i][j].opt);
}
for (ll i=1;i<=m;++i)
{
ll k,x,a,b,c;
x=llread();a=llread();b=llread();c=llread();
k=1+(a*pre+b)%c;
// if (i==m) k++;
printf("%lld\n",pre=query(rt[x],1,top,k));
}
}
BZOJ 3932 [CQOI2015]任务查询系统 ——可持久化线段树的更多相关文章
- 2018.06.30 BZOJ 3932: [CQOI2015]任务查询系统(主席树)
3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MB Description 最近实验室正在为其管理的超级计算机编制一套任务管理 ...
- bzoj 3932: [CQOI2015]任务查询系统 -- 主席树 / 暴力
3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MB Description 最近实验室正在为其管理的超级计算机编制一套任务管 ...
- bzoj 3932 [CQOI2015]任务查询系统(主席树)
Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分. 超级计算机中的任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si ...
- bzoj 3932: [CQOI2015]任务查询系统
Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si ...
- BZOJ 3932: [CQOI2015]任务查询系统 [主席树]
传送门 题意: 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第Ei秒后结束(第Si秒和Ei秒任务也在运行),其优先级为Pi 调度系统会经常向查询系统询问,第Xi ...
- BZOJ.3932.[CQOI2015]任务查询系统(主席树 差分)
题目链接 对于这一区间的操作,我们可以想到差分+前缀和(感觉也没什么别的了..). 同时对于本题我们能想到主席树,而主席树正是利用前一个节点建树的. 所以离散化.按时间排序,把操作拆成单点加和减即可. ...
- BZOJ 3932: [CQOI2015]任务查询系统 | 主席树练习题
题目: 洛谷也能评测 题解: De了好长时间BUG发现是自己sort前面有一行for没删,气死. 题目询问第x秒时候前k小的P值之和. 朴素想法: 我们可以把P值离散化,然后对于每个时刻建一棵定义域是 ...
- BZOJ 3932 [CQOI2015]任务查询系统 - 差分 + 主席树
Solution 差分就好了, 在$s_i$ 的点+1, $e_i + 1$ 的点 - 1. 查询的时候注意$l == r$ 要返回 $k * b[l]$ ,而不是$sum[node] $因为当前位置 ...
- BZOJ 3932: [CQOI2015]任务查询系统 (主席树板题)
就是裸的主席树,差分之后排序插入主席树就行了. 注意主席树查询的时候叶子节点要特判,因为本身是有size的 还有要开longlong CODE #include <cctype> #inc ...
随机推荐
- 【linux】ps
来源:http://blog.chinaunix.net/uid-25681671-id-3201927.html Linux下PS命令详解 要对系统中进程进行监测控制,查看状态,内存,CPU的使用情 ...
- C# 串口操作系列(2) -- 入门篇,为什么我的串口程序在关闭串口时候会死锁 ?
第一篇文章我相信很多人不看都能做的出来,但是,用过微软SerialPort类的人,都遇到过这个尴尬,关闭串口的时候会让软件死锁.天哪,我可不是武断,算了.不要太绝对了.99.9%的人吧,都遇到过这个问 ...
- eclipse快捷键Alt + / 失效
最近电脑上的Eclipse没有了自动提示功能,也不是全部不提示,大多数情况下按下"alt+/"键还会产生提示,但是当我在java项目中邪main方法和syso的时候,"a ...
- Mysql之日志恢复
对于Mysql,每一步操作都会有相应记录,如insert,update,delete ,drop ,alter等相关DDL或DML操作.有时难免会出错,但在出错时如何恢复以复原数据. 例如,现在有这些 ...
- oracle dataguard (一)
一.什么是data guard及data guard的工作原理 Data Guard 是一个集合,由一个primary数据库(生产数据库)及一个或多个standby数据库(最多9个)组成.组成Data ...
- css设置网页文本选中样式
网页的默认的文本选中颜色是蓝底白字(大多应该是吧),这个样子: 感觉并不是特别好看,可以通过CSS3的一个特性,一个CSS3的伪类选择器::selection来设置文本被选中时的状态,比如本博客的主题 ...
- 最近360和adsafe软件有冲突
360把adsafe自启动服务给关闭,所以每次启动都不能成功.
- 无废话ExtJs 入门教程四[表单:FormPanel]
无废话ExtJs 入门教程四[表单:FormPanel] extjs技术交流,欢迎加群(201926085) 继上一节内容,我们在窗体里加了个表单.如下所示代码区的第28行位置,items:form. ...
- Ext.MessageBox消息框
Ext JS消息提示框主要包括:alert.confirm.prompt.show 1.Ext.MessageBox.alert() 调用格式: alert( String title, String ...
- hdu 1556:Color the ball(线段树,区间更新,经典题)
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...