给定一个 n 个元素的整数序列 a, 任意时刻对于任一对相邻元素 (ai−1,ai),若 ai−1>ai 则要依次执行如下操作:
a[i-1]--,a[i]++
,然后交换 ai−1 和 ai 的位置。
经过若干次操作后,若能使整个序列变成非降的,则输出最终的序列;否则输出 :(
。
1≤n≤2×105,0≤a[i]≤109。
以后看到这种操作中带加一减一的都要考虑减掉下标。
设 bi=ai−i,不难发现一次操作 (i,i+1) 相当于交换了 bi 和 bi+1。
那么对 bi 排序,判断是否两两不同即可。