A.Reverse(笑死,标题就是reverse,在那swap半天):
#include<bits/stdc++.h>
using namespace std;
int t,n,i,j,k,a[1011];
int main(){
cin>>t;
while(t--){
int f=1;
int t,b;
cin>>n;
for(i=1;i<=n;i++){
cin>>a[i];
}
for(i=1;i<=n;i++){
if(a[i]!=i){
t=i;
for(j=1;j<=n;j++){
if(a[j]==t){
b=j;
break;
}
}reverse(a+t,a+b+1);
break;
}
}for(i=1;i<=n;i++){
cout<<a[i]<<" ";
}cout<<endl;
}
}
B. Odd Swap Sort(奇数和偶数都要递增)
#include <iostream>
#include <algorithm>
#define DEBUG
#define N 200050
using namespace std;
bool solve(void);
// 每组测试数据的 偶数 | 奇数 | 总长度
int evens[N], odds[N], n;
int main(void)
{
int test;
cin >> test;
while (test--)
cout << (solve() ? "YES" : "NO") << endl;
return 0;
}
// 处理各组测试数据
bool solve(void)
{
// 临时读取输入的变量 | 奇数个数 | 偶数个数
int t, odd, even;
t = odd = even = 0;
// 读取数据,偶数读到偶数数组,奇数读到奇数数组
// 同时更新奇数和偶数的个数
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> t;
if (t % 2 == 0)
evens[even++] = t;
else
odds[odd++] = t;
}
// 如果奇数数组或者偶数数组中有不按顺序排列的情况,返回假
for (int i = 0; i < even - 1; i++)
if (evens[i] > evens[i + 1])
return false;
for (int i = 0; i < odd - 1; i++)
if (odds[i] > odds[i + 1])
return false;
// 如果不存在那种情况,输出真
return true;
}
C. Inversion Graph(单调栈找连通图最大值)
#include<bits/stdc++.h>
using namespace std;
long long int i,j,k,n,t;
int main(){
cin>>t;
while(t--){
cin>>n;
stack<int>stk;
for(i=1;i<=n;i++){
cin>>k;
if(stk.empty()){
stk.push(k);
}else{
if(k>stk.top()){
stk.push(k);
}else{
int st=stk.top();
while(!stk.empty()&&stk.top()>k){
stk.pop();
}stk.push(st);
}
}
}
cout<<stk.size()<<endl;
}
}