zoukankan      html  css  js  c++  java
  • BZOJ 3932: [CQOI2015]任务查询系统 [主席树]

    传送门

    题意:

    任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第Ei秒后结束(第Si秒和Ei秒任务也在运行),其优先级为Pi
    调度系统会经常向查询系统询问,第Xi秒正在运行的任务中,优先级最小的Ki个任务(即将任务按照优先级从小到大排序后取前Ki个)的优先级之和是多少
    对于100%的数据,1≤m,n,Si,Ei,Ci≤100000,0≤Ai,Bi≤100000,1≤Pi≤10000000,Xi为1到n的一个排列

    我太弱了怎么什么题都要调怎么长时间
    明显的区间$k$大
    问一个点?差分就好了......前缀$k$大
    时间建主席树,优先级建权值线段树
    然后会爆$int$....$WA$
    然后链表开小了....$WA$
    然后最重要的,我手残加上了去重!!!去重你还怎么找前$k$大和啊沙茶
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    #define lc(x) t[x].l
    #define rc(x) t[x].r
    typedef long long ll;
    const int N=1e5+5;
    int read(){
        char c=getchar();int x=0,f=1;
        while(c<'0'||c>'9'){if(c=='-')f=-1; c=getchar();}
        while(c>='0'&&c<='9'){x=x*10+c-'0'; c=getchar();}
        return x*f;
    }
    int n,m;
    struct Task{
        int s,e,p;
        bool operator <(const Task &r)const{return p<r.p;}
    }a[N];
    struct Edge{
        int v,ne,f;
    }e[N<<1];
    int h[N],cnt;
    inline void ins(int u,int v,int f){
        cnt++;
        e[cnt].v=v;e[cnt].f=f;e[cnt].ne=h[u];h[u]=cnt;
    }
    struct Node{
        int l,r,size;
        ll sum;
    }t[N*40];
    int sz,root[N];
    void fIns(int &x,int l,int r,int p,int v){
        t[++sz]=t[x];x=sz;
        t[x].size+=v;
        t[x].sum+= (ll)(v==1?a[p].p:-a[p].p);
        if(l==r) return;
        int mid=(l+r)>>1;
        if(p<=mid) fIns(lc(x),l,mid,p,v);
        else fIns(rc(x),mid+1,r,p,v);
    }
    ll fQue(int x,int l,int r,int k){
        if(t[x].size<=k) return t[x].sum;
        if(l==r) return t[x].sum;
        int mid=(l+r)>>1,lsize=t[lc(x)].size;
        if(k<=lsize) return fQue(lc(x),l,mid,k);
        else return t[lc(x)].sum+fQue(rc(x),mid+1,r,k-lsize);
    }
    int main(){
        freopen("in","r",stdin);
        m=read();n=read();
        for(int i=1;i<=m;i++) a[i].s=read(),a[i].e=read(),a[i].p=read();
        sort(a+1,a+1+m);
        for(int i=1;i<=m;i++) ins(a[i].s,i,1),ins(a[i].e+1,i,-1);    
        for(int u=1;u<=n;u++){
            root[u]=root[u-1];
            for(int i=h[u];i;i=e[i].ne) fIns(root[u],1,m,e[i].v,e[i].f);
        }
    
        ll last=1,x,A,B,C,k;
        for(int i=1;i<=n;i++){
            x=read();A=read();B=read();C=read();
            k=1+(A*last+B)%C;
            last=fQue(root[x],1,m,k);
            printf("%lld
    ",last);
        }
    }
     
     
  • 相关阅读:
    GitHub Interesting Collection
    使用 CSS3 Flexible Boxes 布局
    消失的属性
    浅谈 JavaScript 模块化编程
    为你的 Javascript 加点咖喱
    软件测试
    osi七层模型
    3_Hydra(爆破神器)
    2_NC(瑞士军刀)
    1_HTTP协议详解
  • 原文地址:https://www.cnblogs.com/candy99/p/6491551.html
Copyright © 2011-2022 走看看