Codeforces Round #771 (Div. 2) B. Odd Swap Sort

该博客介绍了如何解决Codeforces上的Problem-B问题。通过分析奇数列和偶数列的逆序对,判断是否能通过交换元素达到非递减顺序。代码实现中,首先找到奇数列和偶数列的最大值,然后检查是否存在逆序对,如果存在则无法通过交换达成目标,输出'no';否则,输出'yes'。
摘要由CSDN通过智能技术生成

题面: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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值