codeforces round 782 Div2 D. Reverse Sort Sum
作者:互联网
D. Reverse Sort Sum
思路
首先可以观察到每个1都加了n次,所以总共1的个数就是sum/n,然后排完序1都在后面,后面也就好确定,最后一个数字只能有1和n两种情况
1的时候这一位是0,n的时候这一位是1,然后向前移一位,同时把f(a,n)减去,可以使用线段树来维护
代码:
void solve() {
int n = read();
int sum = 0;
for (int i = 1;i <= n;i++) a[i] = read(), sum += a[i];
sum /= n;
build(1, 1, n);
for (int i = 1;i <= n;i++) ans[i] = 0;
for (int i = n;i >= 1;i--) {
int x = query(1, i, i);
if (x == i) ans[i] = 1;
if (sum > 0) {
modify(1, i - sum+1 , i, -1LL);
if(ans[i]) sum--;
}
}
for (int i = 1;i <= n;i++) printf("%lld ", ans[i]);
puts("");
clean();
}
标签:Sort,Reverse,782,int,sum,ans,Sum 来源: https://www.cnblogs.com/koto-k/p/16165065.html