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 ...
随机推荐
- 1060: [ZJOI2007]时态同步
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3610 Solved: 1521[Submit][Status][Discuss] Descript ...
- Smartforms 设置纸张打印格式
在sap做一个打印报表,要先设置一个纸张打印格式,下面以工厂中常用来打印的针孔纸为例,在sap设置该纸张的打印格式,以用于报表: 1.运行事务代码SPAD:选择工具栏上的[完全管理]按钮——>选 ...
- Linux常见文件管理命令
1.Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示.(1)目录管理命令——ls:列出指定目录下的内容格式:ls [OPTION]... [FILE]... -a:显示所有文件包 ...
- 柱状图多系列php动态实现(ec)
<?php require_once 'data.php'; $arr1=$a->sum('answer','ask_id=1'); $arr2=$a->sum('answer',' ...
- 文档-linux io模式及select,poll,epoll
文档-Linux IO模式详解 1. 概念说明 在进行解释之前,首先要说明几个概念:- 用户空间和内核空间- 进程切换- 进程的阻塞- 文件描述符- 缓存 I/O 1.1 用户空间与内核空间 现在操作 ...
- Android 自定义WebView 实现可以加载缓存数据
1.自定义WebView说明 1.1.这个WebView可以加载缓存的数据.(需要后端配合,将html转换成一个字符串,主要是图片要用特殊格式) 1.2.注入了图片链接,为了方便点击webView中的 ...
- Enhacing the content with JavaScript
What not to do : In theory , you could use JavaScript to add important content to a web page. Howev ...
- LinkedHashMap和HashMap的比较使用 详解
由于现在项目中用到了LinkedHashMap,并不是太熟悉就到网上搜了一下. import java.util.HashMap; import java.util.Iterator; import ...
- Django的Field(字段)
字段 1.models.AutoField 自增列 = int(11) 如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将给列设置为主键 primary_key=Tr ...
- JS 金钱格式化
JavaScript Money Format(用prototype对Number进行扩展) Number.prototype.formatMoney = function (places, symb ...