【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值离散化,然后对于每个时刻建一棵定义域是 ...
随机推荐
- CDH安装kafka
摘要:前言其实cloudera已经做了这个事了,只是把kafka的包和cdh的parcel包分离了,只要我们把分离开的kafka的服务描述jar包和服务parcel包下载了,就可以实现完美集成了.具体 ...
- 二、Linux 静态IP,动态IP配置
Linux 静态IP,动态IP配置 第一步:激活网卡 系统装好后默认的网卡是eth0,用下面的命令将这块网卡激活. # ifconfig eth0 up 第二步:设置网卡进入系统时启动 想要每次开机就 ...
- windows 搭建 subversion+TortoiseSVN
1.版本 (a)Apache 2.2.25:httpd-2.2.25-win32-x86-no_ssl.msi (b)Subversion:Setup-Subversion-1.8.5.msi (c) ...
- R工具包
直到12月初在微软技术大会,看到我软的工程师演示R的使用,我就震惊了,然后最近在网上到处了解和爬一些R的资料,看着看着就入迷了,这就是个大宝库了,以前怎么没发现,看来还是太狭隘了.直到前几天我看到这个 ...
- ROS 教程之 network:多台计算机之间网络通信(2)
在上一篇文章中我们已经搭建好了两台计算机间通信的条件,但是每次都需要在新的终端里输入一长串export ROS_MASTER_URI之类的.实际弄起来的时候也不方便,因此在本文中,我们更进一步,简化两 ...
- ubuntu 16.04 安装pycharm
Ubuntu16.04下安装Cuda8.0+Caffe+TensorFlow-gpu+Pycharm过程(Simple) ubuntu 16.04 安装pycharm 1.安装java jdk 直接 ...
- UIView的几个枚举定义
UIView是iOS开发最主要的视图,非常多控件都是继承它,掌握当中的几个基本枚举定义,有利益理解视图的载入和參数差别. 一.UIViewAnimationCurve UIView的基本动画变化规律 ...
- HDF5 文件格式简介
三代测序下机的原始数据不再是fastq格式了,而是换成了hdf5 格式,在做三代数据的分析之前,有必要先搞清楚hdf5 这种文件格式; 官网的链接如下:https://support.hdfgroup ...
- 最短路径问题-Floyd算法
概念 最短路径也是图的一个应用,即寻找图中某两个顶点的最短路径长度. 实际应用:例如确定某两个城市间的坐火车最短行车路线长度等. Floyd algorithm 中文名就是弗洛伊德算法. 算法思路:用 ...
- 详解JQuery Ajax 在asp.net中使用总结
自从有了JQuery,Ajax的使用变的越来越方便了,但是使用中还是会或多或少的出现一些让人短时间内痛苦的问题.本文暂时总结一些在使用JQuery Ajax中应该注意的问题,如有不恰当或者不完善的地方 ...