zoukankan      html  css  js  c++  java
  • A. Greg and Array 夜

    http://codeforces.com/contest/295/problem/A

    对于一个数组 如果是对某一连续的区间进行加上某个数 或者以等差数列的形式进行加数

    都可以对此区间进行一定的标记 最后遍历一边就可以出结果

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<set>
    #include<map>
    #include<vector>
    #include<queue>
    #include<stack>
    
    #define LL long long
    
    using namespace std;
    const int N=110000;
    const LL MOD = 1000000007;
    LL a[N],b[N];
    int l[N],r[N];
    LL value[N],num[N];
    
    int main()
    {
        //freopen("data.in","r",stdin);
        int n,m,k;
        while(cin>>n>>m>>k)
        {
            for(int i=1;i<=n;++i)
            cin>>a[i];
            for(int i=1;i<=m;++i)
            cin>>l[i]>>r[i]>>value[i];
            memset(num,0,sizeof(num));
            while(k--)
            {
                int L,R;
                cin>>L>>R;
                ++num[L];
                --num[R+1];
            }
            memset(b,0,sizeof(b));
            for(int i=1;i<=m;++i)
            {
                num[i]+=num[i-1];
                b[l[i]]+=(value[i]*num[i]);
                b[r[i]+1]-=(value[i]*num[i]);
            }
            //for(int i=1;i<=m;++i)
            //cout<<b[i]<<" ";cout<<endl;
            for(int i=1;i<=n;++i)
            {
                b[i]+=b[i-1];
                cout<<(a[i]+b[i])<<" ";
            }
            cout<<endl;
    
        }
        return 0;
    }
    
  • 相关阅读:
    POJ 1045
    POJ 1051
    POJ 1047
    POJ 1050
    POJ 1046
    POJ 1036
    POJ 1035
    POJ 1032
    【洛谷P1412】经营与开发
    【洛谷P3377】【模板】左偏树(可并堆)
  • 原文地址:https://www.cnblogs.com/liulangye/p/3026846.html
Copyright © 2011-2022 走看看