【题目分析】

主席树,维护区间大小以及权值之和。

但是细节确实要琢磨很久,WA了几次。

【代码】

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>

#include <set>
#include <map>
#include <string>
#include <algorithm>
#include <vector>
#include <iostream>
#include <queue>

using namespace std;

#define maxn 300005
#define mlog 40
#define inf (0x3f3f3f3f)
#define ll long long

ll read()
{
    ll x=0,f=1; char ch=getchar();
    while (ch<'0'||ch>'9') {if (ch=='-') f=-1; ch=getchar();}
    while (ch>='0'&&ch<='9') {x=x*10+ch-'0'; ch=getchar();}
    return x*f;
}

ll llread()
{
    ll x=0,f=1; char ch=getchar();
    while (ch<'0'||ch>'9') {if (ch=='-') f=-1; ch=getchar();}
    while (ch>='0'&&ch<='9') {x=x*10+ch-'0'; ch=getchar();}
    return x*f;
}

ll rt[maxn],ls[maxn*mlog],rs[maxn*mlog],siz[maxn*mlog],tot=0,n,m;
struct eve{ll p,opt;}a[maxn];
vector <eve> v[maxn];
ll sum[maxn*mlog];
ll b[maxn],top=0,cnt=0;
ll pre=1;

/*
void ins(ll o1,ll &o2,ll l,ll r,ll x,ll f)
{
    o2=++tot;
    siz[o2]=siz[o1]+f;
    sum[o2]=sum[o2]+(ll)b[x]*f;
    if (l==r) return ;
    ll mid=(l+r)/2;
    if (x<=mid)  ins(ls[o1],ls[o2],1,mid,x,f),rs[o2]=rs[o1];
    else ins(rs[o1],rs[o2],mid+1,r,x,f),ls[o2]=ls[o1];
//  sum[o2]=sum[ls[o1]]+sum[ls[o2]];
}
*/

ll ins (ll o1,ll l,ll r,ll x,ll f)
{
    ll now=++tot;
    siz[now]=siz[o1]+f;
    sum[now]=sum[o1]+b[x]*f;
    if (l==r) return now;
    ll mid=(l+r)/2;
    if (x<=mid) ls[now]=ins(ls[o1],l,mid,x,f),rs[now]=rs[o1];
    else rs[now]=ins(rs[o1],mid+1,r,x,f),ls[now]=ls[o1];
    return now;
}

ll query(ll o,ll l,ll r,ll x)
{
    if (x>=siz[o]) return sum[o];
    if (l==r) return min(x,siz[o])*b[l];
    ll tmp=siz[ls[o]];
    if (tmp>=x) return query(ls[o],l,(l+r)/2,x);
    else return sum[ls[o]]+query(rs[o],(l+r)/2+1,r,x-tmp);
}

int main()
{
    n=read();m=read();
    for (ll i=1;i<=n;++i)
    {
        ll x=read(),y=read(),z=read();
        if (x<=m)
        {
            a[++cnt].p=z;
            a[cnt].opt=1;
            v[x].push_back(a[cnt]);
        }
        if (y+1<=m)
        {
            a[++cnt].p=z;
            a[cnt].opt=-1;
            v[y+1].push_back(a[cnt]);
        }
        b[++top]=z;
    }
    sort(b+1,b+top+1);
    top=unique(b+1,b+top+1)-b-1;
    for (ll i=1;i<=m;++i)
    {
        rt[i]=rt[i-1];
        for (ll j=0;j<v[i].size();++j)
            rt[i]=ins(rt[i],1,top,lower_bound(b+1,b+top+1,v[i][j].p)-b,v[i][j].opt);
    }
    for (ll i=1;i<=m;++i)
    {
        ll k,x,a,b,c;
        x=llread();a=llread();b=llread();c=llread();
        k=1+(a*pre+b)%c;
//      if (i==m) k++;
        printf("%lld\n",pre=query(rt[x],1,top,k));
    }
}

  

BZOJ 3932 [CQOI2015]任务查询系统 ——可持久化线段树的更多相关文章

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

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

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

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

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

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

  4. bzoj 3932: [CQOI2015]任务查询系统

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

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

    传送门 题意: 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第Ei秒后结束(第Si秒和Ei秒任务也在运行),其优先级为Pi 调度系统会经常向查询系统询问,第Xi ...

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

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

  7. BZOJ 3932: [CQOI2015]任务查询系统 | 主席树练习题

    题目: 洛谷也能评测 题解: De了好长时间BUG发现是自己sort前面有一行for没删,气死. 题目询问第x秒时候前k小的P值之和. 朴素想法: 我们可以把P值离散化,然后对于每个时刻建一棵定义域是 ...

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

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

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

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

随机推荐

  1. SQL Server order by语句学习回顾

    主要学习: 1.以指定的次序返回查询结果 2.按多个字段排序 3.按字串排序 4.处理排序空值 5.根据数据项的键排序 具体实例1---以指定的次序返回查询结果 n使用ORDER BY子句可以对结果集 ...

  2. HTML标记之a标签

    一.a标签的语法 <a href=”链接目标地址” title=”注释” target=”打开链接窗口的形式”>链接显示内容</a> target值: _blank在新窗口中打 ...

  3. PHP try catch

    本文转载自百度知道 http://zhidao.baidu.com/link?url=Wi5EOXIf12yBp9d_4VoFHCUFtlTPcZJ0sxidLspV6P7qAqYMap3IC6dXE ...

  4. iOS开发中调试小技巧

    对于软件开发而言,调试是必须学会的技能,重要性不言而喻.对于调试的技能,基本上是可以迁移的,也就是说你以前在其他平台上掌握的很多调试技巧,很多也是可以用在iOS开发中.不同语言.不同IDE.不同平台的 ...

  5. LoadRunner 思考时间与事务响应时间的区别与关系

    LoadRunner 思考时间与事务响应时间的区别与关系   思考时间lr_think_time 就是一个事务要开始时思考的时间;比如 你要点击一个 登录按钮 我们都要点击这个按钮要先思考下 就是人为 ...

  6. SVM NG课件1

    SVM NG课件1 2014年9月28日 16:39 一个二维空间点的示例     已使用 Microsoft OneNote 2013 创建.

  7. Delphi面向对象的属性

    可以把属性看成是能对类中的数据进行修改和执行代码的特殊的辅助域.对于组件来说,属性就是列在Object Inspector窗口的内容.下面的例子定义了一个有属性的简单对象 TMyObject = cl ...

  8. blender源代码编译

    blender源码路径(svn):https://svn.blender.org/svnroot/bf-blender/trunk/blender/ 依赖外部Lib(svn):https://svn. ...

  9. 分享一个最近研究的手机QQ3.0的协议(版本1.4)

    最近闲来有事, 分析了一个非常低端(非常低端的意思是说你不应该对她是否能取代你现有的QQ客户端作任何可能的奢望,她只是一个实验性的东西)的手机QQ的协议, 是手机QQ3.0,      所用到的TCP ...

  10. 实时视频应用之QoS关键技术分析

    转自:http://www.aiweibang.com/m/detail/104476372.html?from=p 随着WebRTC标准的逐步推广,实时音视频通讯技术受到越来越多公司和技术人员的关注 ...