题目描述:题目给定一个序列 a a a,每次可以选择任意一个位置前/后插入任一元素,要求在最少的操作次数内使序列 a a a满足 a i ≤ i a_i \le i ai≤i,也就是序列中元素下标小于等于元素的值。
思路分析:考虑如何构造最小操作。首先插入的元素我们可以人为保证一定满足 a i ≤ i a_i \le i ai≤i,如果序列只有一个不满足条件的元素 a j a_j aj,那么必定要操作 a j − j a_j - j aj−j次;如果有多对元素不满足情况,我们此时应当选取最靠近序列起始点的不满足条件的元素,在其前面插入元素。由于每个不满足条件元素的操作次数一定为 a j − j a_j - j aj−j次,该值最大 m a x ( a j − j ) max(a_j - j) max(aj−j)的不满足条件元素一定位于第一个不满足条件元素(包括)之后,那么此时的的操作次数至少为 m a x ( a j − j ) max(a_j - j) max(aj−j)。因此对整个序列求 m a x ( a j − j ) max(a_j - j) max(aj−j)即可。
#include
#define int long long
using namespace std;
const int N = 1000;
int a[N];
inline void solve(){
int n; cin >> n;
for(int i = 1; i > a[i];
int maxx = -1;
for(int i = 1; i a[i];
if(n & 1){
for(int i = 1; i = a[i + 1]){
cout
关注
打赏
- 回坑记之或许是退役赛季?
- [LCT刷题] P1501 [国家集训队]Tree II
- [LCT刷题] P2147 洞穴勘测
- 2022-2023 ICPC Brazil Subregional Programming Contest VP记录
- [线段树套单调栈] 2019-2020 ICPC Asia Hong Kong Regional Contest H.[Hold the Line]
- The 2021 ICPC Asia Nanjing Regional Contest E.Paimon Segment Tree 区间合并线段树/维护矩阵乘法
- CF580E - Kefa and Watch 线段树维护哈希
- HDU5869 Different GCD Subarray Query 离线查询/区间贡献
- 27.CF1004F Sonya and Bitwise OR 区间合并线段树
- 26.CF1000F One Occurrence