筹备计划
题目描述
同学们现在分散在数轴上1~n的整点上,设整点i上的同学数量为ai。
还有一个集合位置的候选集合S,初始为{1,2,…,n}。
你还要处理q次操作,每次操作,可能发生以下事件:
- 在某个位置的同学增加x个或减少x个。
- 令某个区间[l,r]内的整点成为可以选择的整点(将[l,r]中不在S内的点加入S)。
- 令某个区间[l,r]内的整点成为不能选择的整点(将S中在[l,r]内的点删去)。
对于区间限制的操作,不保证操作前该区间的整点是否能选择。操作的影响都是会保留下来的。
每次操作过后,你都需要找到S中的一个整点k作为集合位置,最小化所有同学走到该点的距离总和。形式化地,你需要:
$$\min_{k \in S} \left\{ \sum_{i=1}^{n} a_{i} \times |i-k| \right\}
$$
如果有多个满足条件的k,选择k最小的那个。
输入格式
第一行包含两个整数n,q,表示整点的范围和操作次数。
第二行包含n个整数,第i个整数ai表示在初始时刻每个位置上的学生数量。
接下来q行,每行包含三个整数type,x,y:
- 若type=1,表示在x位置增加y名学生(保证1≤x≤n,1≤y≤2×105);
- 若type=2,表示在x位置减少y名学生(保证1≤x≤n,1≤y≤2×105,x位置一定存在至少y名学生);
- 若type=3,表示在[x,y]内的整点成为可以选择的整点(保证1≤x≤y≤n);
- 若type=4,表示在[x,y]内的整点成为不能选择的整点(保证1≤x≤y≤n)。
输出格式
输出总共q行,第i行的数为第i个操作发生后,对应集合位置k。
无解输出−1。
数据范围与提示
- 对于20%的数据,n,q≤200;
- 对于50%的数据,n,q≤2000;
- 对于另外30%的数据,不存在type=3和type=4的操作;
- 对于100%的数据,1≤n≤2×105,1≤q≤2×105,0≤ai≤2×105。
样例
5 4
1 0 1 0 0
1 4 1
2 3 1
4 1 3
3 2 3
3
1
4
2
见position2.in
见position2.ans