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

    [题目链接]

              https://www.lydsy.com/JudgeOnline/problem.php?id=3932

    [算法]

            首先 , 我们可以将(Si , Ei , Pi)转化为在Si处加入Pi , 在(Ei + 1)出删除Pi

            建立可持久化线段树 , 维护每秒出现任务的个数和优先级的和 , 即可

            时间复杂度 : O(NlogN)

    [代码]

           

    #include<bits/stdc++.h>
    using namespace std;
    #define MAXN 200010
    typedef long long LL;
    
    int n , m , idx , version;
    int S[MAXN] , E[MAXN] , P[MAXN] , root[MAXN * 40] , cnt[MAXN * 40] , tmp[MAXN * 40] , lson[MAXN * 40] , rson[MAXN * 40] , rt[MAXN * 40];
    LL sum[MAXN * 40];
    multiset< int > ins[MAXN] , del[MAXN];
    
    template <typename T> inline void chkmax(T &x,T y) { x = max(x,y); }
    template <typename T> inline void chkmin(T &x,T y) { x = min(x,y); }
    template <typename T> inline void read(T &x)
    {
        T f = 1; x = 0;
        char c = getchar();
        for (; !isdigit(c); c = getchar()) if (c == '-') f = -f;
        for (; isdigit(c); c = getchar()) x = (x << 3) + (x << 1) + c - '0';
        x *= f;
    }
    inline void build(int &k , int l , int r)
    {
            k = ++idx;
            cnt[k] = sum[k] = 0;
            if (l == r) return;
            int mid = (l + r) >> 1;
            build(lson[k] , l , mid);
            build(rson[k] , mid + 1 , r);        
    }
    inline void modify(int &k , int old , int l , int r , int x , int value)
    {
            k = ++idx;
            lson[k] = lson[old] , rson[k] = rson[old];
            cnt[k] = cnt[old] + value;
            sum[k] = sum[old] + 1LL * tmp[x] * value;    
            if (l == r) return;
            int mid = (l + r) >> 1;
            if (mid >= x) modify(lson[k] , lson[k] , l , mid , x , value);
            else modify(rson[k] , rson[k] , mid + 1 , r , x , value);
    }
    inline LL query(int &k , int l , int r , int x)
    {
        if (l == r) return 1LL * tmp[l] * min(x , cnt[k]);
        int mid = (l + r)    >> 1;
        if (cnt[lson[k]] >= x) return query(lson[k] , l , mid , x);
        else return sum[lson[k]] + query(rson[k] , mid + 1 , r , x - cnt[lson[k]]); 
    }
     
    int main()
    {
            
            read(n); read(m);
            for (int i = 1; i <= n; i++)
            {
                  read(S[i]);
                    read(E[i]);
                  read(P[i]);
                  tmp[i] = P[i];
            }
            sort(tmp + 1 , tmp + n + 1);
            int len = unique(tmp +  1 , tmp + n + 1) - tmp - 1;
            for (int i = 1; i <= n; i++) 
            {
                    P[i] = lower_bound(tmp +  1 , tmp + len + 1 , P[i]) - tmp;
                    ins[S[i]].insert(P[i]);
                    del[E[i] + 1].insert(P[i]);
            }
            build(root[version = 0] , 1 , len);
            for (int i = 1; i <= n; i++)
            {
                    for (multiset< int > :: iterator it = ins[i].begin(); it != ins[i].end(); it++)
                    {
                            int t = (*it);
                            modify(root[++version] , root[version] , 1 , n , t , 1);    
                    }        
                    for (multiset< int > :: iterator it = del[i].begin(); it != del[i].end(); it++)
                    {
                            int t = (*it);
                            modify(root[++version] , root[version] , 1 , n , t , -1);
                    }
                    rt[i] = version;
            }
            LL pre = 1;
            for (int i = 1; i <= m; i++)
            {
                LL xi , ai , bi , ci;
                read(xi); read(ai); read(bi); read(ci);
                int ki = (1LL * ai * (pre % ci) % ci + bi % ci) % ci + 1;
                printf("%lld
    " , pre = query(root[rt[xi]] , 1 , n , ki));        
            }
            
            return 0;
        
    }
  • 相关阅读:
    aidl 详解
    为什么我选择用 flutter
    hunting
    Dynamic programming
    android 微信开发交流群
    hash function 字符串哈希函数
    函数也可以看成是空间的变换
    语法树
    生活中的物理随处可见
    about coroutine
  • 原文地址:https://www.cnblogs.com/evenbao/p/9975381.html
Copyright © 2011-2022 走看看