四个小时,各种方法打,各种超时。。最后同学提醒是哈希才恍然大悟,,自己真是太水了
结果自己再打时还是因为一点没注意到wr了两次。。
注意t[i+c]+=t[i],不是t[i+c]=t[i];
代码:
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
int t[200010]={0};
int main()
{
int a,b;
while(cin>>a>>b)
{
memset(t,0,sizeof(t));
int i;
int k;
long long sum=0;
while(a--)
{
cin>>k;
sum+=k;
t[k]++;
}
int l,r,c;
while(b--)
{
cin>>l>>r>>c;
if(l>r)
swap(l,r);
for(i=r;i>=l;i--)
{
if(t[i]>0)
{
sum+=(t[i]*c);
t[i+c]+=t[i];
t[i]=0;
}
}
}
cout<<sum<<endl;
}
return 0;
}