一遍线型跑过
遇到下降就判断 如果可以调换就加计数器 最后看计数器的数量
注意!!
要注意重复的数据 所以加上等号
注意开始l r 赋初值均为1
也就没有什么其他的需要注意了
普通的线型模拟 注意细节别写的脑袋昏
#include
#define debug cout<<bug<<endl
using namespace std;
const int inf=0x7f7f7f7f;
inline void read(int &x){
x=0;int f=1;char c=getchar();
while(c>'9'||c<'0'){if(c=='-') f=-1;c=getchar();}
while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+(c^48),c=getchar();
x*=f;
}
int n,x,y,l=1,r=1,f;
int a[100100];
int main()
{
read(n);
for(int i=1;i<=n;i++) read(a[i]);
a[n+1]=inf;
for(int i=1;i<=n;i++)
{
if(a[i]<a[i-1])
{
f++;
l=i-1;
x=a[i-2];
for(;i<=n;i++)
{
if(a[i]<=a[i+1])
{
if(x>=a[i]) f=inf;
if(a[l]>=a[i+1]) f=inf;
r=i;
break;
}
}
}
}
if(f>1) printf("no\n");
else printf("yes\n%d %d\n",l,r);
return 0;
}
京公网安备 11010502036488号