题意:
给你一个排列,你可以将其中[l,r]区间翻转,问你字典序最小的答案是多少。
题解:
一开始没有看到排列这个信息,所以写着写着感觉不太对劲啊,不像是A题的难度,于是重新看了一遍题意。
不过去掉排列这个点,倒是可以再出一道题目。
那么我们肯定是贪心地找最小的值,然后翻转,但是这个最小值它指的不一定是1,比如第三个样例,它翻转的就是2,那我们要找的最小是不在1,2,3,4这种递增当中的最小即可。
#include<bits/stdc++.h>
using namespace std;
const int N=505;
int a[N];
int main()
{
int t;
scanf("%d",&t);
while(t--){
int n,now=1,sta=0;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
if((a[i]==now&&!sta)||sta==-1)
printf("%d ",a[i]),now++;
else if(a[i]!=now&&!sta)
sta=i;
else if(a[i]==now&&sta){
for(int j=i;j>=sta;j--)
printf("%d ",a[j]);
sta=-1;
}
}
printf("\n");
}
return 0;
}