Subtask 3只过了中间
#include <bits/stdc++.h>
using namespace std;
int n,a[100100];
int main(){
int t;
cin>>t;
while (t--) {
cin>>n;
int ls=0;
for(int i=1;i<=n;i++){
cin>>a[i];
};
a[n+1]=1e5;
for(int i=1;i<=n;i++){
if(a[i]==-1){
int l=i,r=i;
while (a[r]==-1) {
r++;
}
int sum=a[r]-a[l-1];
for(;i<r;i++){
if(sum>1000) a[i]=a[i-1]+1000,sum-=1000;
else a[i]=a[i-1]+1;
}
}
}
for(int i=1;i<=n;i++){
cout<<a[i]-a[i-1]<<' ';
}
cout<<endl;
}
}
大体思路:
判断-1块的两边之差,在这个差不小于1000之前全填1000,剩下的填1