恕我才学浅薄,一开始想到的是树状数组+线段树,然后看了题解才第一次见到了差分这种神奇的科技

仔细想想,主席树的本质不就是前缀和嘛,加上一个差分也是可以的,没想到真是罪过罪过

对时间维护一个差分

在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]任务查询系统(差分+主席树)的更多相关文章

  1. bzoj3932 / P3168 [CQOI2015]任务查询系统(主席树+差分)

    P3168 [CQOI2015]任务查询系统 看到第k小,就是主席树辣 对于每一段任务(a,b,k),在版本a的主席树+k,版本b+1的主席树-k 同一时间可能有多次修改,所以开个vector存操作, ...

  2. [BZOJ3932][CQOI2015]任务查询系统(差分+主席树)

    题面 分析 对于一个区间修改(s,e,v),我们可以将它差分,这样就变成了单点修改s和e+1(s插入,t+1删除) 我们用主席树维护差分数组的前缀和,第i棵主席树维护区间[1,i]之间的所有差分值 那 ...

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

    Solution 差分就好了, 在$s_i$ 的点+1, $e_i + 1$ 的点 - 1. 查询的时候注意$l == r$ 要返回 $k * b[l]$ ,而不是$sum[node] $因为当前位置 ...

  4. BZOJ_3932_[CQOI2015]任务查询系统_主席树

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

  5. 2018.06.30 BZOJ 3932: [CQOI2015]任务查询系统(主席树)

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

  6. BZOJ3932 CQOI2015 任务查询系统 【主席树】

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

  7. 【洛谷 P3168】 [CQOI2015]任务查询系统(主席树)

    题目链接 被自己的sb错误调到自闭.. 主席树的进阶应用. 把\(P_i\)离散化一下,得到每个\(P_i\)的排名,然后建一棵维护\(m\)个位置的主席树,每个结点记录区间总和和正在进行的任务数. ...

  8. [BZOJ3932] [CQOI2015]任务查询系统(主席树 || 树状数组 套 主席树 + 差分 + 离散化)

    传送门 看到这个题有个很暴力的想法, 可以每一个时间点都建一颗主席树,主席树上叶子节点 i 表示优先级为 i 的任务有多少个. 当 x 到 y 有个优先级为 k 的任务时,循环 x 到 y 的每个点, ...

  9. [bzoj3932][CQOI2015]任务查询系统_主席树

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

  10. [bzoj3932][CQOI2015][任务查询系统] (主席树)

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

随机推荐

  1. Linux 运维测试及第三应用及测试工具

    一 .第三方应用及测试工具链接地址 https://pan.baidu.com/s/1rLQ5NCZvxcy93YQ4fGFaBQ 1.linux LSI系列raid卡监测工具 1)使用参数详解链接: ...

  2. turtle库基础练习

    1.画一组同切圆 import turtle turtle.circle(10) turtle.circle(20) turtle.circle(30) turtle.circle(40) turtl ...

  3. Spark学习之路 (十一)SparkCore的调优之Spark内存模型

    摘抄自:https://www.ibm.com/developerworks/cn/analytics/library/ba-cn-apache-spark-memory-management/ind ...

  4. AtCoder Beginner Contest 043 D - アンバランス / Unbalanced

    题目链接:http://abc043.contest.atcoder.jp/tasks/arc059_b Time limit : 2sec / Memory limit : 256MB Score ...

  5. Python3 freetds.conf odbcinst.ini odbc.ini 之间的关系

    Python3 freetds.conf odbcinst.ini odbc.ini 之间的关系 三者分别是FreeTDS和UnixODBC的配置文件: 1,FreeTDS中的freetds.conf ...

  6. 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 ...

  7. 百度uid-generator源码

    https://github.com/baidu/uid-generator snowflake算法 uid-generator是基于Twitter开源的snowflake算法实现的. snowfla ...

  8. 08: MySQL慢查询

    1.1 寻找慢查询   定义:我们将超过指定时间的SQL语句查询称为“慢查询”. 1.在mysql日志中开启慢查询日志 1. 修改配置文件  在 my.ini 增加几行:  主要是慢查询的定义时间(超 ...

  9. [c/c++] programming之路(9)、运算优先级

    一.运算优先级 二.条件运算符(表达式1?表达式2:表达式3) 当式1正确时,取式2的值:否则,取式3的值 三.格式字符 #include<stdio.h> #include<std ...

  10. yolo3(目标检测)实测

    yolo是继faster-r-cnn后,原作者在目标检测领域进行的新研究.到了v3版本以后,虽然已经换人支持,但是更注重工程实践,在实际使用过程中突出感受就是 “非常快”,GPU加速以后能够达到实时多 ...