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

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

对时间维护一个差分

在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. html5-增强的表单-表单的重写

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  2. css中选项卡的实现

    制作一个简单的选项卡,以供初学者参考:关于css书写的比较粗糙.请见谅 <!DOCTYPE html><html lang="en"><head> ...

  3. Spring NoSuchBeanDefinitionException

    转http://www.baeldung.com/spring-nosuchbeandefinitionexception 1. Overview In this article, we are di ...

  4. [转]Hive开发总结

    看到一篇挺不错的hive开发总结文章,在此转载一下,有兴趣的可以去看原文,传送门HIVE开发总结. 基本数据类型 查看所有函数 搜索函数 搜索表 查看函数使用方法 关键字补全 显示表头 SET环境变量 ...

  5. c# 制作弹窗

    1.右键选择添加,添加windows窗体 2.添加第几个窗体这就是Form几 3.具现化  窗口,然后调用       具现化窗口名+ShowDialog  就可以弹出新的窗口 这个功能需要使用,自己 ...

  6. 创建一个简单的WCF程序2——手动开启/关闭WCF服务与动态调用WCF地址

    一.创建WCF服务器 1.创建WCF服务器的窗体应用程序 打开VS2010,选择文件→新建→项目菜单项,在打开的新建项目对话框中,依次选择Visual C#→Windows→Windows窗体应用程序 ...

  7. WebStorm: The Smartest JavaScript IDE by JetBrains

    WebStorm: The Smartest JavaScript IDE by JetBrains https://www.jetbrains.com/webstorm/?fromMenu

  8. [转载]C#中IndexOf的使用

    注:此方法无法找出目标字符串第二次.第三次等出现的位置. 具体代码如下所示: 1 2 3 4 5 var array=['REG','2018','2018'];   array.indexOf(‘R ...

  9. WTL CHyperLink类的使用(超链接)

    1.包含atlctrlx.h头文件: 2.声明一个CHyperLink类的变量: CHyperLink        m_linkIntro; 3.在OnInitDialog函数里: m_linkIn ...

  10. 怎样从外网访问内网WebLogic?

    本地安装了一个WebLogic,只能在局域网内访问,怎样从外网也能访问到本地的WebLogic呢?本文将介绍具体的实现步骤. 准备工作 安装并启动WebLogic 默认安装的WebLogic端口是70 ...