其他分享
首页 > 其他分享> > codeforces round 782 Div2 D. Reverse Sort Sum

codeforces round 782 Div2 D. Reverse Sort Sum

作者:互联网

D. Reverse Sort Sum

image

思路

首先可以观察到每个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