看了一下差分后,打了一遍这道题,全部WA,又对了一下题解,但是本地运行结果还是错的 (悲处所在:不开放数据下载)
这是我的代码:
#include<bits/stdc++.h>
using namespace std;
const int N=5e6+5;
int a[N],b[N];
int x,y,z,n,m,mi=INT_MAX;
//void print(){
// for(int i=1;i<=n;i++){
// cout<<b[i-1]+a[i-1]<<" ";
// }
// cout<<endl<<"--------------------------------------------"<<endl;
//}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
b[i]=a[i]-a[i-1];
}
for(int i=1;i<=m;i++){
cin>>x>>y>>z;
b[x]+=z;
b[y+1]-=z;
// print();
}
for(int i=1;i<=n;i++){
mi=min(mi,b[i]+a[i-1]);
}
cout<<mi;
return 0;
}
我核对的题解:(我知道该题解受害了,但我没核对出什么名堂)
#include<bits/stdc++.h>
using namespace std;
int d[5000001];//d[i]表示a[i]-a[i-1]
int a[5000001];
int main()
{
int n,p,x,y,z,i,min=1e9;
cin>>n>>p;
for(i=1;i<=n;i++)
{
cin>>a[i];
}
for(i=1;i<=n;i++)
{
d[i]=a[i]-a[i-1];
}
for(i=0;i<p;i++)
{
cin>>x>>y>>z;
d[x]+=z;
d[y+1]-=z;
}
for(i=1;i<=n;i++)
{
a[i]=a[i-1]+d[i];
if(min>a[i])
{
min=a[i];
}
}
cout<<min;
return 0;
}
thx,还望各位dalao放过我这个蓝名蒟蒻