P3168 [CQOI2015]任务查询系统

看到第k小,就是主席树辣

对于每一段任务(a,b,k),在版本a的主席树+k,版本b+1的主席树-k

同一时间可能有多次修改,所以开个vector存操作,再开个数组ti[p]保存时间点p最终的版本号

注意long long

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
typedef long long ll;
inline int Abs(int a){return a<?-a:a;}
inline int Max(int a,int b){return a>b?a:b;}
#define N 100005
#define W 20000005
int n,m,mx,u,tot,ti[N],rt[W],lc[W],rc[W],siz[W];
ll s[W],Pre=;
vector <int> g[N];
#define mid (l+r)/2
void Ins(int &o,int p,int l,int r,int v){
o=++u; siz[o]=siz[p]+(v>?:-); s[o]=s[p]+v;
if(l==r) return ;
if(Abs(v)<=mid) rc[o]=rc[p],Ins(lc[o],lc[p],l,mid,v);
else lc[o]=lc[p],Ins(rc[o],rc[p],mid+,r,v);
}
ll Ask(int o,int l,int r,int k){
if(l==r) return 1ll*l*k;
if(siz[lc[o]]>k) return Ask(lc[o],l,mid,k);
else return s[lc[o]]+Ask(rc[o],mid+,r,k-siz[lc[o]]);
}
int main(){
register int i,j; int q1,q2,q3,q4;
scanf("%d%d",&n,&m);
for(i=;i<=n;++i){
scanf("%d%d%d",&q1,&q2,&q3);
g[q1].push_back(q3);
g[q2+].push_back(-q3);
mx=Max(mx,q3);
}
for(i=;i<=n;++i){
for(j=g[i].size()-;j>=;--j)
++tot,Ins(rt[tot],rt[tot-],,mx,g[i][j]);
ti[i]=tot;
}
for(i=;i<=m;++i){
scanf("%d%d%d%d",&q1,&q2,&q3,&q4);
q2=+(q2*Pre+q3)%q4; q1=rt[ti[q1]];
Pre=q2<siz[q1]?Ask(q1,,mx,q2):s[q1];
printf("%lld\n",Pre);
}return ;
}

bzoj3932 / P3168 [CQOI2015]任务查询系统(主席树+差分)的更多相关文章

  1. 【BZOJ3932】[CQOI2015]任务查询系统 主席树

    [BZOJ3932][CQOI2015]任务查询系统 Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si, ...

  2. 洛谷P3168 [CQOI2015]任务查询系统 [主席树,差分]

    题目传送门 任务查询系统 题目描述 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任 ...

  3. BZOJ.3932.[CQOI2015]任务查询系统(主席树 差分)

    题目链接 对于这一区间的操作,我们可以想到差分+前缀和(感觉也没什么别的了..). 同时对于本题我们能想到主席树,而主席树正是利用前一个节点建树的. 所以离散化.按时间排序,把操作拆成单点加和减即可. ...

  4. P3168 [CQOI2015]任务查询系统(主席树)

    题目描述 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第Ei ...

  5. BZOJ3932: [CQOI2015]任务查询系统 主席树

    3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 4869  Solved: 1652[Submit][St ...

  6. [CQOI2015]任务查询系统 主席树

    [CQOI2015]任务查询系统 LG传送门 以前还没见过主席树的这种写法. 考虑使用差分的思想处理每一个任务,然后所有的东西就都能顺理成章地用主席树维护了,查询的时候和平时的主席树有一点不同,详见代 ...

  7. bzoj 3932: [CQOI2015]任务查询系统 -- 主席树 / 暴力

    3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec  Memory Limit: 512 MB Description 最近实验室正在为其管理的超级计算机编制一套任务管 ...

  8. BZOJ 3932: [CQOI2015]任务查询系统 (主席树板题)

    就是裸的主席树,差分之后排序插入主席树就行了. 注意主席树查询的时候叶子节点要特判,因为本身是有size的 还有要开longlong CODE #include <cctype> #inc ...

  9. BZOJ3932[CQOI2015]任务查询系统——主席树

    题目描述 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第E ...

随机推荐

  1. python 获取SLB信息 更换证书

    首先安装阿里云SDK pip install aliyun-python-sdk-core pip install aliyun-python-sdk-slb 可以配合jenkins传递参数 #获取s ...

  2. asp.net几个重要对象

    DataSet是用来做连接sql的一种方法,意思是把数据库的副本存在应用程序里,应用程序开始运行时,把数据库相关数据保存到DataSet.DataTable表示内存中数据的一个表.常和DefaultV ...

  3. 修改CentOS的IP地址

    一.临时修改 命令:ifconfig eth0 192.168.1.147 重启或者关机后,iP地址将会恢复到修改之前的状态. 二.永久修改 命令: vi /etc/sysconfig/network ...

  4. centos7安装Amber16 && AmberTools

    Centos7 安装amber16 1.准备下载好的amber(Amber16.tar.bz2)及tools(AmberTools16.tar.bz2)安装包: $ cd MySoftware_hom ...

  5. 「美团外卖APP签约快捷支付」流程体验

    §1 添加银行卡 新用户在美团外卖APP订餐支付时,首先要绑定银行卡.如下是“添加银行卡”页,输入卡号后,系统自动调用卡bin库校验卡号的有效性,如果有效会显示发卡行和卡类型(借记卡/贷记卡).  这 ...

  6. node.js初识04

    node的Get表单提交 form.html <!DOCTYPE html> <html lang="en"> <head> <meta ...

  7. gitlab4.0备份还原

    一,备份 备份默认路径查看: gitlab/config/gitlab.yml 中的backup: 默认tmp/backups ====>这个是gitlab/tmp/backups/  可不是系 ...

  8. C++调用openssl库生成RSA加密秘钥对

    直接上代码.默认生成的是pkcs#1格式 // ---- rsa非对称加解密 ---- // #define KEY_LENGTH 1024 // 密钥长度 #define PUB_KEY_FILE ...

  9. 搭建私有仓库Harbor

    搭建Harbor企业级docker仓库   搭建Harbor企业级docker仓库 一.Harbor简介 1.Harbor介绍 Harbor是一个用于存储和分发Docker镜像的企业级Registry ...

  10. Java操作队列

    Java操作队列 常见的几种模式:   1 简单队列simple 模型:(p + 队列 + c) P:生产者producer,将消息发送到队列 红色:消息队列 C:消费者consumer,从队列消费消 ...