题面:Problem - B - Codeforces
思路:
注意到只有两个数奇偶性不同才能互相交换位置。分别考虑奇数列和偶数列情况。
如果奇数列或偶数列中有逆序存在,则原数列肯定不可能能够通过交换元素位置,达到非递减数列。
实现:
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int a[N];
int main()
{
int T;
scanf("%d", &T);
while(T--)
{
int n;
scanf("%d", &n);
for(int i = 0; i < n; i++) scanf("%d", &a[i]);
int odd = - 1e9 - 10, even = - 1e9 - 10;
bool flag = true;
for(int i = 0; i < n; i++)
{
int x = a[i];
if(x % 2)
{
if(odd > x)
{
flag = false;
break;
}
odd = x;
}
else
{
if(even > x)
{
flag = false;
break;
}
even = x;
}
}
puts(flag ? "yes" : "no");
}
return 0;
}