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

    树状数组不用动脑子真爽啊

    #include <algorithm>
    #include <iostream>
    #include <cstdio>
    using namespace std;
    typedef long long ll;
    int m, n, b[100005], rem, rot[100005], lson[20000005], rson[20000005], siz[20000005];
    int cnt, xi, ai, bi, ci, ki, qque[45], len;
    ll sum[20000005], lst=1;
    struct Task{
        int fro, too, val;
    }tsk[100005];
    int lowbit(int x){
        return x&-x;
    }
    void update(int &rt, int l, int r, int x, int val){
        if(!rt)	rt = ++cnt;
        siz[rt] += val;
        sum[rt] += val * b[x];
        if(l==r)	return ;
        int mid=(l+r)>>1;
        if(x<=mid)	update(lson[rt], l, mid, x, val);
        if(mid<x)	update(rson[rt], mid+1, r, x, val);
    }
    ll query(int l, int r, int k){
        if(l==r)	return (ll)k*b[l];
        int tmp=0;
        ll tat=0;
        for(int i=1; i<=len; i++)
            tmp += siz[lson[qque[i]]], tat += sum[lson[qque[i]]];
        int mid=(l+r)>>1;
        if(k<=tmp){
            for(int i=1; i<=len; i++)
                qque[i] = lson[qque[i]];
            return query(l, mid, k);
        }
        else{
            for(int i=1; i<=len; i++)
                qque[i] = rson[qque[i]];
            return query(mid+1, r, k-tmp)+tat;
        }
    }
    int main(){
        cin>>m>>n;
        for(int i=1; i<=m; i++){
            scanf("%d %d %d", &tsk[i].fro, &tsk[i].too, &tsk[i].val);
            b[i] = tsk[i].val;
        }
        sort(b+1, b+1+m);
        rem = unique(b+1, b+1+m) - (b + 1);
        for(int i=1; i<=m; i++){
            int tmp=lower_bound(b+1, b+1+rem, tsk[i].val)-b;
            for(int j=tsk[i].fro; j<=n; j+=lowbit(j))
                update(rot[j], 1, rem, tmp, 1);
            for(int j=tsk[i].too+1; j<=n; j+=lowbit(j))
                update(rot[j], 1, rem, tmp, -1);
        }
        for(int i=1; i<=n; i++){
            scanf("%d %d %d %d", &xi, &ai, &bi, &ci);
            ki = 1 + ((ll)ai*lst+bi) % ci;
            int tmp=0;
            ll ppp=0;
            for(int i=xi; i; i-=lowbit(i)){
                tmp += siz[rot[i]];
                ppp += sum[rot[i]];
            }
            if(tmp<ki)	lst = ppp;
            else{
                len = 0;
                for(int i=xi; i; i-=lowbit(i))
                    qque[++len] = rot[i];
                lst = query(1, rem, ki);
            }
            printf("%lld
    ", lst);
        }
        return 0;
    }
    
  • 相关阅读:
    namespace for c++
    [爬虫]Python爬虫基础
    为什么局域网IP是192.168开头?
    [Python基础]Python中remove,del和pop的区别
    权限控制(delphi actionlist)
    Delphi ActionList详解
    充分利用HTML标签元素 – 简单的xtyle前端框架
    好用的侧边栏菜单/面板jQuery插件
    最新的手机/移动设备jQuery插件
    有用的jQuery布局插件推荐
  • 原文地址:https://www.cnblogs.com/poorpool/p/8343224.html
Copyright © 2011-2022 走看看