zoukankan      html  css  js  c++  java
  • [bzoj3932][CQOI2015]任务查询系统

    坑题。非常坑。


    Description

    最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分。超级计算机中的
    任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第Ei秒后结束(第Si秒和Ei秒任务也在运行
    ),其优先级为Pi。同一时间可能有多个任务同时执行,它们的优先级可能相同,也可能不同。调度系统会经常向
    查询系统询问,第Xi秒正在运行的任务中,优先级最小的Ki个任务(即将任务按照优先级从小到大排序后取前Ki个
    )的优先级之和是多少。特别的,如果Ki大于第Xi秒正在运行的任务总数,则直接回答第Xi秒正在运行的任务优先
    级之和。上述所有参数均为整数,时间的范围在1到n之间(包含1和n)。

    Input

    输入文件第一行包含两个空格分开的正整数m和n,分别表示任务总数和时间范围。接下来m行,每行包含三个空格
    分开的正整数Si、Ei和Pi(Si≤Ei),描述一个任务。接下来n行,每行包含四个空格分开的整数Xi、Ai、Bi和Ci,
    描述一次查询。查询的参数Ki需要由公式 Ki=1+(Ai*Pre+Bi) mod Ci计算得到。其中Pre表示上一次查询的结果,
    对于第一次查询,Pre=1。

    Output

    输出共n行,每行一个整数,表示查询结果。
    1≤m,n,Si,Ei,Ci≤100000,0≤Ai,Bi≤100000,1≤Pi≤10000000,Xi为1到n的一个排列

    懒得改LaTeX了。挺坑的之一是什么1到n排列,,差点被拐跑?没卵用。

    然后就是主席树(动态开点线段树吧,感觉算不上主席树??)

    然后查询的时候l=r的时候不能直接返回sum。感觉虽然坑但是也挺妙。

    然后最坑的是暴力艹翻数据结构。QwQ

    #include<bits/stdc++.h>
    using namespace std;
    const int N=100010;
    typedef long long ll;
    inline int read(){
        int r=0,c=getchar();
        while(!isdigit(c))c=getchar();
        while(isdigit(c))
        r=r*10+c-'0',c=getchar();
        return r;
    }
    int rt[N],ls[N*40],rs[N*40],pre[N*40];
    ll sum[N*40],bb[N];
    int n,m,cnt,ff;
    void ins(int &k,int o,int l,int r,int val){
        k=++cnt;ls[k]=ls[o],rs[k]=rs[o];
        sum[k]=sum[o]+1ll*bb[val]*ff,pre[k]=pre[o]+ff;
        if(l==r)return;
        int mid=l+r>>1;
        if(val<=mid)ins(ls[k],ls[o],l,mid,val);
        else ins(rs[k],rs[o],mid+1,r,val);
    }
    ll query(int k,int l,int r,int rk){
        if(rk==0)return 0;
        if(l==r)return bb[l]*rk;
        if(rk>=pre[k])return sum[k];
        int mid=l+r>>1; 
        if(rk<=pre[ls[k]])return query(ls[k],l,mid,rk);
        else return sum[ls[k]]+query(rs[k],mid+1,r,rk-pre[ls[k]]);
    }
    vector<int>ps[N],pp[N];
    void init(){
        n=read(),m=read();
        for(int i=1;i<=n;i++){
            int s=read(),t=read(),v=read();bb[i]=v;
            ps[s].push_back(v);
            pp[t+1].push_back(v);
        }
        sort(bb+1,bb+n+1);
        for(int i=1;i<=m;i++){
            rt[i]=rt[i-1];
            ff=1;
            for(int j=0;j<ps[i].size();j++){
                int x=ps[i][j];x=lower_bound(bb+1,bb+n+1,x)-bb;
                ins(rt[i],rt[i],1,n,x);
            }
            ff=-1;
            for(int j=0;j<pp[i].size();j++){
                int x=pp[i][j];x=lower_bound(bb+1,bb+n+1,x)-bb;
                ins(rt[i],rt[i],1,n,x);
            }
        }
    }
    void solve(){
        ll ans=1,k,a,b,c;
        for(int T=1;T<=m;T++){
            int pos=read();a=read(),b=read(),c=read();
            k=1+(a*ans+b)%c;
            ans=query(rt[pos],1,n,k);
            printf("%lld
    ",ans);
        }
    }
    int main(){
        init();
        solve();
    }
  • 相关阅读:
    asp.net连接mssql server的方式
    mssql如何创建简单的存储过程
    varchar和nvarchar的区别
    C#中关键字partial的作用
    oracle创建用户命令
    在linux上安装音频视频播放器解码器(打造完美播放器)
    oracle创建表空间
    windows console application链接数据库读取数据
    今天学习asp.net mvc的过程中出现了一点问题,是有关浏览器的,一个疑问?
    华为t8100刷机之后出现illegal version 不久开始关机,提示非法版本
  • 原文地址:https://www.cnblogs.com/orzzz/p/8618066.html
Copyright © 2011-2022 走看看