刷题时遇到了这道题,
写出来一个完全没逻辑的做法,
代码如下
#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[1000005];
int x[1000005],l[1000005],r[1000005];
long long d[1000005],s[1000005];
int main(){
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
for(int i=1;i<=m;i++){
scanf("%d %d %d",&x[i],&l[i],&r[i]);
d[l[i]]+=x[i];
d[r[i]+1]-=x[i];
}
for(int i=1;i<=n;i++){
s[i]=s[i-1]+d[i];
}
for(int i=1;i<=n;i++){
if(s[i]>a[i]){
printf("-1\n");
long long sum=0;
for(int j=1;j<=m;j++){
if(i>=l[j]&&i<=r[j]){
sum+=x[j];
if(sum>a[i]){
printf("%d",j);
break;
}
}
}
return 0;
}
}
printf("0");
return 0;
}
虽然可以通过,但是过不了题目给的输入输出样例。
错误原因是这个代码是在m个订单后判断是否能完成,但这会导致像本来是在第三天超的,可最后判断发现第二天就已经超了,造成答案错误。
建议添加一两个像输入输出样例的数据点 :)