正解:主席树

解题报告:

传送门!

首先考虑如果是单点修改,那就是个线段树板子嘛$QwQ$

然后现在是区间修改,对于区间修改,显然就考虑差分下,就变成单点修改辣$QwQ$

同时单点查询前$k$小也就变成了区间查询前$k$小

于是就主席树套下就好$QwQ$

详细点儿说下趴$QwQ$.先考虑如果查询的不是前$k$小,而是问这个点的$\sum p$,怎么做$QwQ$?

就考虑先转化成单点修改,然后区间查询算出$[1,x]$的所有数之和就成$QwQ$

然后现在问前$k$小?于是就查询前$k$个数的和就成$QwQ$.

这里可能会有疑问?就说如果某个任务在这之前就结束了怎么把它的影响消去?就考虑在$t+1$这里把这个任务的收益和数量影响都减去就好

$over$

$attention$,这儿有个我认为比较有用的小结论,就经常可以利用查分等手段,将单点查询区间修改与区间查询单点修改这种之类的彼此之间转换$QwQ$

然后这个小结论事实上在树上也有一定的应用,之前省选前$yyb$出的$T2$,$zsy$港了一个不记得什么东西的方法可以不用树剖,,,好像是把单点修改和子树修改相转换,,,?不记得辽,,,我哭死$QAQ$,,,如果哪天又想起来了可能会去问问学长什么的趴,,,$QAQ$大概不会有那天的$QwQ$

昂当然这种还是有一定局限性的,但也确实是一种比较妙的方法辣,还是要多思考多掌握昂$QwQ$

#include<bits/stdc++.h>
using namespace std;
#define il inline
#define gc getchar()
#define ri register int
#define rb register bool
#define rc register char
#define rp(i,x,y) for(ri i=x;i<=y;++i)
#define my(i,x,y) for(ri i=x;i>=y;--i)
#define lb(x) lower_bound(st+1,st+1+sum,x)-st const int N=+;
int m,n,st[N],sum,rt[N],nod_cnt,pre=;
struct evt{int tim,p,w;}e[N<<];
struct node{int l,r,num,sum;}tr[N<<]; il int read()
{
rc ch=gc;ri x=;rb y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il bool cmp(evt gd,evt gs){return gd.tim<gs.tim;}
void modify(ri &nw,ri d,ri l,ri r,ri pos,ri num)
{
nw=++nod_cnt;tr[nw]=tr[d];ri mid=(l+r)>>;
if(l==r){tr[nw].sum+=st[pos]*num,tr[nw].num+=num;return;}
if(mid>=pos)modify(tr[nw].l,tr[d].l,l,mid,pos,num);else modify(tr[nw].r,tr[d].r,mid+,r,pos,num);
tr[nw].sum=tr[tr[nw].l].sum+tr[tr[nw].r].sum;tr[nw].num=tr[tr[nw].l].num+tr[tr[nw].r].num;
}
int query(ri nw,ri l,ri r,ri num)
{
if(tr[nw].num<=num)return tr[nw].sum;
if(l==r)return (tr[nw].sum/tr[nw].num)*num;
if(tr[tr[nw].l].num>=num)return query(tr[nw].l,l,(l+r)>>,num);
return tr[tr[nw].l].sum+query(tr[nw].r,((l+r)>>)+,r,num-tr[tr[nw].l].num);
} int main()
{
//freopen("3168.in","r",stdin);freopen("3168.out","w",stdout);
m=read();n=read();
rp(i,,m){ri s=read(),t=read()+,p=read();e[(i<<)-]=(evt){s,st[++sum]=p,};e[i<<]=(evt){t,p,-};}
sort(st+,st++sum);sum=unique(st+,st++sum)-st-;sort(e+,e+((m<<)|),cmp);
rp(i,,m<<){modify(rt[e[i].tim],rt[e[i-].tim],,sum,lb(e[i].p),e[i].w);}
rp(i,,n)if(!rt[i])rt[i]=rt[i-];
while(n--)
{
ri x=read(),a=read(),b=read(),c=read(),k=+(1ll*a*pre%c+b)%c;
printf("%d\n",pre=query(rt[x],,sum,k));
}
return ;
}

洛谷$P$3168 任务查询系统 $[CQOI2015]$ 主席树的更多相关文章

  1. 【BZOJ3932】任务查询系统(主席树)

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

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

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

  3. ●洛谷P3168 [CQOI2015]任务查询系统

    题链: https://www.luogu.org/problemnew/show/P3168题解: 主席树 强制在线? 那就直接对每一个前缀时间建一个线段树(可持久化线段树),线段树维护优先度权值. ...

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

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

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

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

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

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

  7. 洛谷P2633 Count on a tree(主席树上树)

    题目描述 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权.其中lastans是上一个询问的答案,初始为0,即第一个 ...

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

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

  9. 洛谷P4587 [FJOI2016]神秘数(主席树)

    题面 洛谷 题解 考虑暴力,对于询问中的一段区间\([l,r]\),我们先将其中的数升序排序,假设当前可以表示出\([1,k]\)目前处理\(a_i\),假如\(a_i>k+1\),则答案就是\ ...

随机推荐

  1. Flask学习之十三 日期和时间

    英文博客地址:http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xiii-dates-and-times 中文翻译地址: ...

  2. 11-1 css属性选择器

    一 基础选择器 标签选择器:选择的标签的‘共性’,而不是特性 div{}.ul{}.ol{}.form{} 类选择器:.box{} id选择器:#box{} 只能选择器的特性,主要是为了js *通配符 ...

  3. MySQL列出当前月的每一天

    因为工作的原因,要用MySQL列出当前月份每一天的日期,自己查了下网上资料都是列出最近一个月的日期的解决方案,自己根据查到的的方案,修改成了下面两个方案,在此记录下: 方案一: SELECT date ...

  4. 从 Spark 到 Kubernetes — MaxCompute 的云原生开源生态实践之路

    2019年5月14日,喜提浙江省科学技术进步一等奖的 MaxCompute 是阿里巴巴自研的 EB 级大数据计算平台.该平台依托阿里云飞天基础架构,是阿里巴巴在10年前做飞天系统的三大件之分布式计算部 ...

  5. 基于TableStore的海量气象格点数据解决方案实战

    前言 气象数据是一类典型的大数据,具有数据量大.时效性高.数据种类丰富等特点.气象数据中大量的数据是时空数据,记录了时间和空间范围内各个点的各个物理量的观测量或者模拟量,每天产生的数据量常在几十TB到 ...

  6. behavior planning——14.implement a cost function in C++

    n most situations, a single cost function will not be sufficient to produce complex vehicle behavior ...

  7. laravel 学习笔记blog后台

    https://github.com/almasaeed2010/adminlte composer require "almasaeed2010/adminlte=~2.0"

  8. POJ2406 Power Strings 题解 KMP算法

    题目链接:http://poj.org/problem?id=2406 题目大意:给你一个字符串 \(t\) ,\(t\) 可以表示为另一个小字符串循环了 \(K\) 了,求最大的循环次数 \(K\) ...

  9. 条件随机场(CRF) - 3 - 概率计算问题

    声明: 1,本篇为个人对<2012.李航.统计学习方法.pdf>的学习总结,不得用作商用,欢迎转载,但请注明出处(即:本帖地址). 2,由于本人在学习初始时有很多数学知识都已忘记,所以为了 ...

  10. CentOS7在防火墙与端口上的操作

    https://jingyan.baidu.com/article/cdddd41cb3bf6c53cb00e1ac.html CentOS7在安装软件包或类库的时候,常常会因为防火墙的拦截和端口未开 ...