zoj 3745 Salary Increasing

来源:互联网 发布:怎么加盟农村淘宝 编辑:程序博客网 时间:2024/05/05 22:21

题意:某老板要给员工涨薪,每次给工资在[l,r]范围的人涨c单位工资,问最后老板要付多少钱。

思路:这题其实是到水题,放上来的原因是提醒自己认真看题…… 题里有个条件:ri <li+1  看到这个条件基本就做出来了,从这个条件发现区间是不重叠的,因此,直接暴力就可以了,用一个数组num[i]记录工资为i的员工的人数,每次涨薪操作后修改人数就行了。。。


代码:


#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<map>#include<queue>#include<set>#include<stack>#include<cmath>#include<vector>#define inf 0x3f3f3f3f#define Inf 0x3FFFFFFFFFFFFFFFLL#define eps 1e-9#define pi acos(-1.0)using namespace std;typedef long long ll;const int maxn=100000+10;int num[maxn];int main(){    //freopen("in.txt","r",stdin);    //freopen("out.txt","w",stdout);    int n,q;    while(~scanf("%d%d",&n,&q))    {        int tmp;        ll sum=0;        memset(num,0,sizeof(num));        for(int i=0;i<n;++i)        {            scanf("%d",&tmp);            num[tmp]++;            sum+=tmp;        }        int l,r,c;        while(q--)        {            scanf("%d%d%d",&l,&r,&c);            //if(l>r) swap(l,r);            for(int i=r;i>=l;--i)            {                sum+=(ll)c*num[i];                if(i+c<maxn) num[i+c]+=num[i];                num[i]=0;            }        }        printf("%lld\n",sum);    }    return 0;}


0 0
原创粉丝点击