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 ...
随机推荐
- iPhone 横屏时默认会放大文字的问题
有人说用 html { text-size-adjust: 100%; }我发现这个并不能解决问题.下面代码可以完美解决. 添加标签:<meta name="viewport" ...
- ethereum(以太坊)(十)--函数修饰符
pragma solidity ^0.4.0; contract modifierTest{ uint public v1; uint constant v2 =10; //uint constant ...
- ethereum(以太坊)(九)--global(全局函数)
pragma solidity ^0.4.0; contract modifierTest{ bytes32 public blockhash; address public coinbase; ui ...
- php-5.6.26源代码 - 扩展模块的加载、注册
// main实现在文件 php-5.6.26\sapi\cgi\cgi_main.c int main(int argc, char *argv[]) { .... cgi_sapi_module- ...
- 使用selenium模拟登录知乎
网上流传着许多抓取知乎数据的代码,抓取它的数据有一个问题一定绕不过去,那就是模拟登录,今天我们就来聊聊知乎的模拟登录. 获取知乎内容的方法有两种,一种是使用request,想办法携带cookies等必 ...
- 宁夏邀请赛F FLOYD
Moving On Firdaws and Fatinah are living in a country with nn cities, numbered from 11 to nn.Each ci ...
- PHP代码审计1-审计环境与调试函数
审计环境与调试函数 审计环境 测试环境 常用集成环境:phpStudy.WampServer #不同的操作系统下,漏洞测试的结果也可能不一样 PHP编写工具 EditPlu Notepad++ 代码审 ...
- C# Dictionary的遍历理解
C# Dictionary容器类的理解 本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/det ...
- 路由vue-router进阶
目录 1. 导航守卫 1.1. 全局守卫 1.2. 全局解析守卫 1.3. 全局后置钩子 1.4. 路由独享的守卫 1.5. 组件内的守卫 1.6. 完整的导航解析流程 2. 路由元信息 3. 获取数 ...
- Django 2.0官方文档中文 总索引
Django 2.0官方文档中文 渣翻 总索引 翻译 2017年12月08日 11:19:1 官方原文: https://docs.djangoproject.com/en/2.0/ 当前翻译版本: ...