注意题目中的,引用绝望的乐园中的进一步解释如下:
这是一道浙大月赛的题,一如既往的坑爹,好好一道水题,被搞成一道坑题!!!
//注意:r(i) < l(i+1) !细节啊细节! #include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> using namespace std; long long num[1000010];//这里必须是long long,不然还是wa int main() { long long sum; int n,m,s,t,add,a; while(scanf("%d%d",&n,&m)!=EOF) { sum=0; memset(num,0,sizeof(num)); for(int i=0;i<n;i++) { scanf("%d",&a); num[a]++; } for(int i=0;i<m;i++) { scanf("%d%d%d",&s,&t,&add); //for(int j=s;j<=t;j++)这样不行因为前面处理过的可能会和同一时间加薪的但排在后面的未处理的数据要小,然后就会被处理两变,然后就wa了 for(int j=t;j>=s;j--)//所以要从大的到小的 { if(num[j]) { num[j+add]+=num[j]; num[j]=0;//是要把原薪资为j的所有员工加薪,然后原薪资为j的员工数就变成了0 } } } for(int i=0;i<1000010;i++)//因为这个“=”符号的原因!!!!!!!!!!!!啊!!!!!!!!!!!!!!!!!我是一个大白痴!!!!!!!题目不注意细节,代码也忽视了细节!!!!!!!!!!! if(num[i]) sum=sum+num[i]*i; printf("%lld ",sum); } return 0; }