如题,我的思路是把前缀和数组 p 填满,最后输出 ai 时输出 pi−pi−1。
代码:
#include <bits/stdc++.h>
using namespace std;
int a[888888], nxt = 1;
int main() {
int T; scanf ("%d", &T);
while(T--) {
bool flg = false;
int n;
scanf ("%d", &n);
for (int i = 1; i <= n; ++i) scanf ("%d", &a[i]);
for (int i = 1; i <= n; ++i) {
if (nxt < i) nxt = i;//下一个为 1 的数
if (a[i] != -1) nxt = i;
while (a[nxt] == -1) ++nxt;
if (nxt > n) flg = true;
// cout << a[i] << ' ' << nxt << ' ' <<i <<endl;
if (!flg && a[i] == -1) a[i] = a[i - 1] + (a[nxt] - a[i - 1]) / (nxt - i + 1);
else if (flg) a[i] = a[i - 1] + 1;
}
for (int i = 1; i <= n; ++i)
printf ("%d ", a[i] - a[i - 1]);
puts("");
}
}