p3168 [CQOI2015]任务查询系统(差分+主席树)
恕我才学浅薄,一开始想到的是树状数组+线段树,然后看了题解才第一次见到了差分这种神奇的科技
仔细想想,主席树的本质不就是前缀和嘛,加上一个差分也是可以的,没想到真是罪过罪过
对时间维护一个差分
在Si处+Ki,在Ti+1处-Ki
用主席树维护插入的数即可
不是很复杂就是代码写了好长时间而且越debug越像题解
注意查前k大的时候比较这样写
if(lch<kth)
//向右
else
//向左
不能这样
if(lch<=kth)
//向右
else
//向左
因为这样在lch与kth相等的情况下,会一直向左走到还没有开的节点上,导致RE
丢人的和题解极其相似的代码
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct PTNode{
int lson, rson;
long long sum, sz;
}x[100100*40];
struct Task{
int Posi,Ki,changew;
bool operator < (const Task &b) const {
return Posi < b.Posi;
}
}b[100100*3];
int a[100100], n, m, Nodecnt = 0, cnt = 0, root[100100];
void pushup(int o){
x[o].sz = x[x[o].lson].sz + x[x[o].rson].sz;
x[o].sum = x[x[o].lson].sum + x[x[o].rson].sum;
}
void insert(int l, int r, int &now, int pos, int c){
x[++Nodecnt] = x[now];
now = Nodecnt;
x[now].sum += a[pos] *c ;
x[now].sz += c;
if(l == r)
return;
int mid=(l + r) >> 1;
if(pos <= mid)
insert(l, mid, x[now].lson, pos, c);
else
insert(mid + 1, r, x[now].rson, pos, c);
}
int query(int l, int r, int o, int kth){//前k小
if(l==r)
return x[o].sum/x[o].sz*kth;
int mid=(l+r)>>1,lch=x[x[o].lson].sz;
if(lch<kth)
return query(mid+1,r,x[o].rson,kth-lch)+x[x[o].lson].sum;
else
return query(l,mid,x[o].lson,kth);
}
int main(){
scanf("%d %d",&m ,&n);
for(int i = 1; i <= m; i++){
int x, y, z;
scanf("%d %d %d",&x, &y, &z);
b[++cnt] = (Task){x, z, 1};
b[++cnt] = (Task){y+1, z, -1};
a[i] = z;
}
sort(a + 1, a + m + 1);
sort(b + 1, b + cnt + 1);
int j = 1;
for(int i = 1; i <= n; i++){
root[i] = root[i-1];
for(;j <= cnt && b[j].Posi == i;j++){
int num = lower_bound(a + 1, a + n + 1 , b[j].Ki) - a;
insert(1, n, root[i], num, b[j].changew);
}
}
long long preans = 1;
for(int i = 1;i <= n;i++){
long long xi,ki,a,b,c;
scanf("%lld %lld %lld %lld", &xi, &a, &b, &c);
ki = 1 + (a * preans + b) % c;
if(ki<=x[root[xi]].sz)
preans = query(1, n, root[xi], ki);
else
preans = x[root[xi]].sum;
printf("%lld\n",preans);
}
return 0;
}
p3168 [CQOI2015]任务查询系统(差分+主席树)的更多相关文章
- bzoj3932 / P3168 [CQOI2015]任务查询系统(主席树+差分)
P3168 [CQOI2015]任务查询系统 看到第k小,就是主席树辣 对于每一段任务(a,b,k),在版本a的主席树+k,版本b+1的主席树-k 同一时间可能有多次修改,所以开个vector存操作, ...
- [BZOJ3932][CQOI2015]任务查询系统(差分+主席树)
题面 分析 对于一个区间修改(s,e,v),我们可以将它差分,这样就变成了单点修改s和e+1(s插入,t+1删除) 我们用主席树维护差分数组的前缀和,第i棵主席树维护区间[1,i]之间的所有差分值 那 ...
- BZOJ 3932 [CQOI2015]任务查询系统 - 差分 + 主席树
Solution 差分就好了, 在$s_i$ 的点+1, $e_i + 1$ 的点 - 1. 查询的时候注意$l == r$ 要返回 $k * b[l]$ ,而不是$sum[node] $因为当前位置 ...
- BZOJ_3932_[CQOI2015]任务查询系统_主席树
BZOJ_3932_[CQOI2015]任务查询系统_主席树 题意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,P ...
- 2018.06.30 BZOJ 3932: [CQOI2015]任务查询系统(主席树)
3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MB Description 最近实验室正在为其管理的超级计算机编制一套任务管理 ...
- BZOJ3932 CQOI2015 任务查询系统 【主席树】
BZOJ3932 CQOI2015 任务查询系统 Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的任务用三元组(Si,Ei, ...
- 【洛谷 P3168】 [CQOI2015]任务查询系统(主席树)
题目链接 被自己的sb错误调到自闭.. 主席树的进阶应用. 把\(P_i\)离散化一下,得到每个\(P_i\)的排名,然后建一棵维护\(m\)个位置的主席树,每个结点记录区间总和和正在进行的任务数. ...
- [BZOJ3932] [CQOI2015]任务查询系统(主席树 || 树状数组 套 主席树 + 差分 + 离散化)
传送门 看到这个题有个很暴力的想法, 可以每一个时间点都建一颗主席树,主席树上叶子节点 i 表示优先级为 i 的任务有多少个. 当 x 到 y 有个优先级为 k 的任务时,循环 x 到 y 的每个点, ...
- [bzoj3932][CQOI2015]任务查询系统_主席树
任务查询系统 bzoj-3932 CQOI-2015 题目大意:最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的任务用三元组(Si,Ei,Pi)描述 ...
- [bzoj3932][CQOI2015][任务查询系统] (主席树)
Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si ...
随机推荐
- Linux 运维测试及第三应用及测试工具
一 .第三方应用及测试工具链接地址 https://pan.baidu.com/s/1rLQ5NCZvxcy93YQ4fGFaBQ 1.linux LSI系列raid卡监测工具 1)使用参数详解链接: ...
- turtle库基础练习
1.画一组同切圆 import turtle turtle.circle(10) turtle.circle(20) turtle.circle(30) turtle.circle(40) turtl ...
- Spark学习之路 (十一)SparkCore的调优之Spark内存模型
摘抄自:https://www.ibm.com/developerworks/cn/analytics/library/ba-cn-apache-spark-memory-management/ind ...
- AtCoder Beginner Contest 043 D - アンバランス / Unbalanced
题目链接:http://abc043.contest.atcoder.jp/tasks/arc059_b Time limit : 2sec / Memory limit : 256MB Score ...
- Python3 freetds.conf odbcinst.ini odbc.ini 之间的关系
Python3 freetds.conf odbcinst.ini odbc.ini 之间的关系 三者分别是FreeTDS和UnixODBC的配置文件: 1,FreeTDS中的freetds.conf ...
- eclipse maven Errors while generating javadoc on java8
With JDK 8, we are unable to get Javadoc unless your tool meets the standards of doclint. Some of it ...
- 百度uid-generator源码
https://github.com/baidu/uid-generator snowflake算法 uid-generator是基于Twitter开源的snowflake算法实现的. snowfla ...
- 08: MySQL慢查询
1.1 寻找慢查询 定义:我们将超过指定时间的SQL语句查询称为“慢查询”. 1.在mysql日志中开启慢查询日志 1. 修改配置文件 在 my.ini 增加几行: 主要是慢查询的定义时间(超 ...
- [c/c++] programming之路(9)、运算优先级
一.运算优先级 二.条件运算符(表达式1?表达式2:表达式3) 当式1正确时,取式2的值:否则,取式3的值 三.格式字符 #include<stdio.h> #include<std ...
- yolo3(目标检测)实测
yolo是继faster-r-cnn后,原作者在目标检测领域进行的新研究.到了v3版本以后,虽然已经换人支持,但是更注重工程实践,在实际使用过程中突出感受就是 “非常快”,GPU加速以后能够达到实时多 ...