题意
有一个长度为n的数组和m次操作并给出一个正整数c。每次操作会给出一个数x,保证x为不大于c的正整数。要求你每次都把x放到数组的某个空位置或替代掉某个数。使得在m次操作结束之前满足数组的每个位置都有数且其单调不降。注意必须在线,也就是在输入下一个数之前就要输出当前数所放的位置且不能再更改。
分析
有点意思的脑洞题(其实并不难),在比赛快结束的时候才想到。不然估计就要掉回div2了。
就是设mid=c/2。则若加入的数不大于mid,则找到从数组最左边开始的第一个空位置。若放这个位置能使得前面的数仍然满足不降,则放,否则就找到第一个大于它的数并替代掉。若大于mid则从右边开始做。因为有题目给定的条件,所以这样做一定是有解的。
代码
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>