【BZOJ3932】[CQOI2015]任务查询系统 主席树
【BZOJ3932】[CQOI2015]任务查询系统
Description
Input
Output
Sample Input
1 2 6
2 3 3
1 3 2
3 3 4
3 1 3 2
1 1 3 4
2 2 4 3
Sample Output
8
11
HINT
题解:本题是主席树的一个简化版吧,我们还是先离散化,然后按时间排序,每有一个任务开始或结束就新建一棵线段树,然后再查询时二分查找时间,然后再线段树上求前k个之和就行了,并且本题的主席树是不用相减的(这还叫主席树吗)
注意一下long long,注意二分边界不要搞错(尤其是用upper_bound的童鞋们),还要注意用离散化后的数来求出答案,还有第47行有点坑人
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const ll maxn=200010;
ll n,m,tot,nm,ans;
struct task
{
ll pt,pv,pk;
}p[maxn];
ll ls[40*maxn],rs[40*maxn],sum[40*maxn],siz[40*maxn];
ll rp[maxn>>1],root[maxn];
bool cmp1(task a,task b)
{
return a.pv<b.pv;
}
bool cmp2(task a,task b)
{
return a.pt<b.pt;
}
ll readin()
{
ll ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-')f=-f;gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();
return ret*f;
}
void insert(ll x,ll &y,ll l,ll r,ll pos,ll val)
{
y=++tot;
if(l==r)
{
siz[y]=siz[x]+val;
sum[y]=sum[x]+rp[l]*val;
return ;
}
ll mid=l+r>>1;
if(pos<=mid) rs[y]=rs[x],insert(ls[x],ls[y],l,mid,pos,val);
else ls[y]=ls[x],insert(rs[x],rs[y],mid+1,r,pos,val);
siz[y]=siz[ls[y]]+siz[rs[y]];
sum[y]=sum[ls[y]]+sum[rs[y]];
}
ll query(ll x,ll l,ll r,ll pos)
{
if(l==r) return rp[l]*pos;
ll mid=l+r>>1;
if(siz[ls[x]]>=pos) return query(ls[x],l,mid,pos);
else return sum[ls[x]]+query(rs[x],mid+1,r,pos-siz[ls[x]]);
}
int main()
{
n=readin(),m=readin();
ll i,a,b,c,d,e;
for(i=1;i<=n;i++)
p[i*2-1].pt=readin(),p[i*2].pt=readin()+1,p[i*2-1].pv=p[i*2].pv=readin(),
p[i*2-1].pk=1,p[i*2].pk=-1;
sort(p+1,p+2*n+1,cmp1);
for(i=1;i<=2*n;i++)
{
if(rp[nm]<p[i].pv) rp[++nm]=p[i].pv;
p[i].pv=nm;
}
sort(p+1,p+2*n+1,cmp2);
for(i=1;i<=2*n;i++)
insert(root[i-1],root[i],1,nm,p[i].pv,p[i].pk);
ans=1;
for(i=1;i<=m;i++)
{
d=readin(),a=readin(),b=readin(),c=readin();
e=1+(a*ans+b)%c;
ll l=1,r=2*n+1,mid;
while(l<r)
{
mid=l+r>>1;
if(p[mid].pt<=d) l=mid+1;
else r=mid;
}
l--;
if(siz[root[l]]<=e) ans=sum[root[l]];
else ans=query(root[l],1,nm,e);
printf("%lld\n",ans);
}
return 0;
}
【BZOJ3932】[CQOI2015]任务查询系统 主席树的更多相关文章
- BZOJ3932: [CQOI2015]任务查询系统 主席树
3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 4869 Solved: 1652[Submit][St ...
- BZOJ3932[CQOI2015]任务查询系统——主席树
题目描述 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第E ...
- BZOJ3932 CQOI2015 任务查询系统 - 主席树,离散化
记录下自己写错的地方吧 1. 区间可能有重复 2. 没有出现的坐标也要计入version (因为询问里可能会有) #include <bits/stdc++.h> using namesp ...
- [CQOI2015]任务查询系统 主席树
[CQOI2015]任务查询系统 LG传送门 以前还没见过主席树的这种写法. 考虑使用差分的思想处理每一个任务,然后所有的东西就都能顺理成章地用主席树维护了,查询的时候和平时的主席树有一点不同,详见代 ...
- bzoj 3932: [CQOI2015]任务查询系统 -- 主席树 / 暴力
3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MB Description 最近实验室正在为其管理的超级计算机编制一套任务管 ...
- 洛谷P3168 [CQOI2015]任务查询系统 [主席树,差分]
题目传送门 任务查询系统 题目描述 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任 ...
- 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值离散化,然后对于每个时刻建一棵定义域是 ...
随机推荐
- ruby send respond_to
http://ruby-metaprogramming.rubylearning.com/html/ruby_metaprogramming_2.html http://galeki.is-progr ...
- SecureCRT工具
技巧收集: 文本文件内容 复制该行内容yy,p粘贴 2+yy复制两行 dd 删除该行 文件内容搜索 非编辑状态/+查找内容 查找指定行 :+行号
- Spring 4 官方文档学习(十)数据访问之OXM
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/oxm.html Java Object 与 XML ...
- 调用ffmpeg库编译时出现common.h:175:47: error: 'UINT64_C' was not declared in this scope
解决办法 出现错误:jni/ffmpeg/libavutil/common.h:175:47: error: 'UINT64_C' was not declared in this scope 解决: ...
- php -- 读取文本文件内容
php读取文件内容的三种方法: //**************第一种读取方式***************************** 代码如下: header("content- ...
- mac下普通用户无法创建crontab的问题解决
想在mac下弄一个crontab定时任务,以为会像linux上那样顺利那,结果碰壁了,报错信息例如以下: ➜ autoshell crontab -ecrontab: no crontab for ...
- hdu2147 kiki's game(博弈)
这个是纳什博弈?不知道怎么看的 依据PN图,从左下角開始推 左下角P 最后一行都是PNPNPN 第一列都是 P N P N P 完了填完即可了 #include<cstdio> int m ...
- JVM基础知识与配置
1 怎样设置JVM内存设置 本文向大家简介一下进行JVM内存设置几种方法.安装Java开发软件时.默认安装包括两个目录,一个JDK(Java开发工具箱).一个JRE(Java执行环境,内含JVM),当 ...
- 小明A+B(杭电2096)
/*小明A+B Problem Description 小明今年3岁了, 如今他已经可以认识100以内的非负整数, 而且可以进行100以内的非负整数的加法计算. 对于大于等于100的整数, 小明仅保留 ...
- 搭建Hadoop伪分布式时遇到的各种错
1.本地连接远端用户没有权限 2.执行时提示,保存三分数据,但是只有一个节点是活的 问题1解决办法:在hdfs-site.xml文件中添加一下配置(是否在HDFS中开启权限检查) <proper ...