您当前的位置: 首页 > 

HeartFireY

暂无认证

  • 3浏览

    0关注

    334博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Codeforces Round #752 Div.2 A,B,C,D

HeartFireY 发布时间:2021-11-01 22:46:23 ,浏览量:3

A.Era

题目描述:题目给定一个序列 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             
关注
打赏
1662600635
查看更多评论
0.0916s