Acerkaio

CF27C 题解

Toretto·2022-02-05 11:07·116 次阅读

CF27C 题解

题意翻译:#

如果一个序列是递增或递降的(相等也算增或降),则称它为有序的。给定一个序列,找出最短的非有序的子序列。子序列可以不连续。

解析:#

情况 结果 原因
N2 无解 元素只可能是单调的
在序列中有 axayayazaxayayaz 的情况 一定有解 这些元素形成无序的情况

我们明显要着重分析 N3 情况:
我们首先需要的是分析是否存在 a1aiaiaja1aiaiaj 的情况。
Q:为啥是这样?

如果有解,第一个是 a1

再简化:是否存在 a1aiaiai+1a1aiaiai+1 的情况。

Q:为啥是这样?

因为:

  1. Copy
    如果 $a[i]>a[i+1]$:
    如果 $a[1]$ 是三者最大,呈降序,不符合条件,舍去。
    如果 $a[1]$ 居中,满足“小大小”无序。
    如果 $a[1]$ 是三者最小,同上。

    --by ahawzlc

所以仅需枚举 1N 即可。

CODE:#

Copy
#include <iostream>
using namespace std;
int a[100001];
int main(){
cin.tie(0);
cout.tie(0);
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=2;i<n;i++)
{
if((a[i+1]>a[i]&&a[i]<a[1])||(a[i+1]<a[i]&&a[i]>a[1])){
cout<<3<<endl<<1<<' '<<i<<' '<<i+1;
return 0;
}
}
cout<<"0\n";
return 0;
}
posted @   ㅤSmartBig  阅读(116)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示
目录