BZOJ 3932: [CQOI2015]任务查询系统 | 主席树练习题
题目:
洛谷也能评测
题解:
De了好长时间BUG发现是自己sort前面有一行for没删,气死.
题目询问第x秒时候前k小的P值之和.
朴素想法:
我们可以把P值离散化,然后对于每个时刻建一棵定义域是离散化后P值的线段树
每个节点维护了这个节点代表区间的任务个数和这些任务离散化之前的P值之和,
对于每个在这个时间段的任务,插入,即在p位置单点修改
询问就是类似二叉查找树的写法
高级想法:
首先把一段任务拆成两个:添加和删除,用三元组(t,p,d)表示,d=1表示插入,d=-1表示删除
对于第maxt棵线段树,我们把操作按t值排序之后进行,
这岂不是就变成可以一棵可以访问历史版本的线段树---主席树了!
那么写棵主席树,插入操作按t排序就O**K了
#include<cstdio>
#include<algorithm>
#include<cstring>
typedef long long ll;
#define N 200100
#define Nlogn N*20
using namespace std;
ll root[Nlogn],n,A,B,C,pre=,m,b[N],K,pcnt,opcnt,lim;
struct node
{
ll lc,rc,sum,val;
}t[Nlogn];
struct Op
{
ll t,p,d;
bool operator < (const Op &a) const{return t<a.t;}
}op[*N];
ll read()
{
ll ret=,neg=;char j=getchar();
for (;j>'' || j<'';j=getchar())
if (j=='-') neg=-;
for (;j>='' && j<='';j=getchar())
ret=ret*+j-'';
return ret*neg;
}
void Insert(ll y,ll &x,ll l,ll r,ll p,ll d)
{
t[x=++pcnt]=t[y];
t[x].sum+=d;t[x].val+=b[p]*d;
if (l==r) return;
ll mid=l+r>>;
if (p<=mid) Insert(t[y].lc,t[x].lc,l,mid,p,d);
else Insert(t[y].rc,t[x].rc,mid+,r,p,d);
}
ll query(ll u,ll l,ll r,ll k)
{
ll mid,ret=;
while (l<r)
{
if (t[u].sum==) return ret;
mid=l+r>>;
if (k<=t[t[u].lc].sum) r=mid,u=t[u].lc;
else k-=t[t[u].lc].sum,ret+=t[t[u].lc].val,l=mid+,u=t[u].rc;
}
return ret+b[l]*k;
}
int getroot(int x)
{
return root[x-]=(root[x-]!= || x==)?root[x-]:getroot(x-);
}
int main()
{
m=read(),n=read();
for (ll i=,s,e,p;i<=m;i++)
{
s=read(),e=read(),p=read();
op[++opcnt].t=s,b[opcnt]=op[opcnt].p=p,op[opcnt].d=;
op[++opcnt].t=e+,b[opcnt]=op[opcnt].p=p,op[opcnt].d=-;
}
//离散化
sort(b+,b++opcnt);
lim=unique(b+,b++opcnt)-b-;
for (ll i=;i<=opcnt;i++)
op[i].p=lower_bound(b+,b+lim+,op[i].p)-b;
//按操作时间插入节点
sort(op+,op++opcnt);
for (ll i=,j=;i<=opcnt;i++)
{
if (root[op[i].t]==) root[op[i].t]=getroot(op[i].t);
Insert(root[op[i].t],root[op[i].t],,lim+,op[i].p,op[i].d);
}
for (ll i=,x;i<=n;i++)
{
x=read(),A=read(),B=read(),C=read();
K=+(A*pre+B)%C;
printf("%lld\n",pre=query(root[x],,lim+,K));
}
return ;
}
BZOJ 3932: [CQOI2015]任务查询系统 | 主席树练习题的更多相关文章
- bzoj 3932: [CQOI2015]任务查询系统 -- 主席树 / 暴力
3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MB Description 最近实验室正在为其管理的超级计算机编制一套任务管 ...
- BZOJ 3932: [CQOI2015]任务查询系统 [主席树]
传送门 题意: 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第Ei秒后结束(第Si秒和Ei秒任务也在运行),其优先级为Pi 调度系统会经常向查询系统询问,第Xi ...
- BZOJ.3932.[CQOI2015]任务查询系统(主席树 差分)
题目链接 对于这一区间的操作,我们可以想到差分+前缀和(感觉也没什么别的了..). 同时对于本题我们能想到主席树,而主席树正是利用前一个节点建树的. 所以离散化.按时间排序,把操作拆成单点加和减即可. ...
- BZOJ 3932: [CQOI2015]任务查询系统 (主席树板题)
就是裸的主席树,差分之后排序插入主席树就行了. 注意主席树查询的时候叶子节点要特判,因为本身是有size的 还有要开longlong CODE #include <cctype> #inc ...
- 2018.06.30 BZOJ 3932: [CQOI2015]任务查询系统(主席树)
3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MB Description 最近实验室正在为其管理的超级计算机编制一套任务管理 ...
- BZOJ3932: [CQOI2015]任务查询系统 主席树
3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 4869 Solved: 1652[Submit][St ...
- [CQOI2015]任务查询系统 主席树
[CQOI2015]任务查询系统 LG传送门 以前还没见过主席树的这种写法. 考虑使用差分的思想处理每一个任务,然后所有的东西就都能顺理成章地用主席树维护了,查询的时候和平时的主席树有一点不同,详见代 ...
- 【BZOJ3932】[CQOI2015]任务查询系统 主席树
[BZOJ3932][CQOI2015]任务查询系统 Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si, ...
- bzoj 3932 [CQOI2015]任务查询系统(主席树)
Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分. 超级计算机中的任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si ...
随机推荐
- ES6的数组方法之Array.from
首先说说什么是数组:数组在类型划分上归为Object,属于比较特殊的对象,数组的索引值类似于对象的key值. 数组的几个注意点: 1.数组的长度是可读属性,不可更改,数组的长度根据索引最大值. 2.数 ...
- swiper轮播始终居中active图片
用的是vue-awesome-swiper 在vue项目中,参数方法与swiper一致.使用场景如下: 左侧小图一共八张,默认显示的是三张,始终保持activeimg在中间,提升用户体验度.swipe ...
- SQL递归查询实现组织机构树
系统用到的组织机构树,要实现对当前节点以及其子节点的查询,数据库SQL要用到递归查询,这也是我第一次接触SQL的递归查询. 先说一下什么是递归查询,简单说来是将一个树状结构存储在一张表里,比如一个表中 ...
- ZJOI2019Round#2
乱听课记录 关于树的分治问题&杂题选讲 张哲宇 边分治 (边分不是很鸡肋吗) 例题一 题目大意:给出两颗有正负边权的树,求出两个点\(u,v\)使得两棵树中\((u,v)\)距离的和最大. ...
- spring-JDBC Template
JDBC Template概念 为简化持久化操作,spring在JDBC API之上提供JDBC Template组件 提供统一模板: 环境配置 1.创建MySQL数据库 2.搭建maven项目,并引 ...
- 交换机基础设置之vtp管理vlan设置
vtp的设置有三种模式1:server模式,负责创建,删除vlan(服务器模式) 2:client模式,负责接收并转发来自server的信息(客户机模式) 3:transparent模式,只负责转发, ...
- xml的应用与dtd约束
1.xml的应用 *不同的系统之间的传输数据(qq消息传输) *用来表示生活中有关系的数据(省市区的包含关系) *经常用在文件配置 **比如现在连接数据库,肯定知道数据库的名称和密码及用户名. ...
- ES6笔记02-箭头函数
eg1:// ES5 匿名函数 var total = values.reduce(function (a, b) { return a + b; }, 0); // ES6 匿名函数 var tot ...
- 【转载】最长回文字符串(manacher算法)
原文转载自:http://blog.csdn.net/lsjseu/article/details/9990539 偶然看见了人家的博客发现这么一个问题,研究了一下午, 才发现其中的奥妙.Stupid ...
- python安装教程(面向对象的解释型计算机程序设计语言)
inux下默认自带的.包括mac,是python2.x 但咱们玩的最新的 python3.x 怎么办呢centos下安装方法: sudo yum install epel- sudo yum i ...