首页 > 其他分享 >D. Swap Dilemma

D. Swap Dilemma

时间:2024-07-09 18:57:04浏览次数:11  
标签:Dilemma int 对换 100005 Swap 对数 now 逆序

原题链接

题解

任意交换两个数,会使序列的逆序对数加减一个奇数。(不懂的,请打开线性代数紫本第七版第五页)
所以如果两个序列,初始逆序对数的奇偶性不同,肯定无法兑换成功
那么,如果两个序列,初始逆序对数的奇偶性相同,是否一定能对换成功?
答案是一定可以的,我们做相邻对换,由于相邻对换总是可以操控逆序对数是加一还是减一,所以两个序列一定能对换到逆序对数相同的状态

code

#include <bits/stdc++.h>
using namespace std;
#define lowbit(x) ((x) & (-x))
int n;
struct node {
    int v, id;
} a[100005], b[100005], c[100005], d[100005];

bool cmp(node x, node y) {
    return x.v < y.v;
}

int tree[100005] = {0}, index[100005];

int query(int now) {
    int res = 0;
    while (now) {
        res += tree[now];
        now -= lowbit(now);
    }
    return res;
}

void update(int now) {
    while (now <= n) {
        tree[now]++;
        now += lowbit(now);
    }
}

void solve() {
    cin >> n;
    for (int i = 1; i <= n; i++) tree[i] = index[i] = 0;
    for (int i = 1; i <= n; i++) {
        cin >> a[i].v;
        a[i].id = i;
        c[i] = a[i];
    }
    for (int i = 1; i <= n; i++) {
        cin >> b[i].v;
        b[i].id = i;
        d[i] = b[i];
    }

    sort(c + 1, c + 1 + n, cmp);
    sort(d + 1, d + 1 + n, cmp);

    for (int i = 1; i <= n; i++) {
        if (c[i].v != d[i].v) {
            puts("no");
            return;
        }
        index[d[i].id] = c[i].id;
    }

    int sum = 0;
    for (int i = 1; i <= n; i++) {
        sum += query(n) - query(index[i]);
        update(index[i]);
    }
    //printf("sum: %d\n", sum);
    if (sum % 2) puts("no");
    else puts("yes");
}

int main() {
    int t;
    cin >> t;

    while (t--) {
        solve();
    }
    return 0;
}

标签:Dilemma,int,对换,100005,Swap,对数,now,逆序
From: https://www.cnblogs.com/pure4knowledge/p/18292578

相关文章

  • 剖析DeFi交易产品之UniswapV4:Swap
    文章首发于公众号:Keegan小钢Swap可分为两种场景:单池交易和跨池交易。在PoolManager合约里,要完成交易流程,会涉及到lock()、swap()、settle()、take()四个函数。单池交易时只需要调一次swap()函数,而跨池交易时则需要多次调用swap()函数来完成。我们先来聊聊单池交......
  • 新版一键AI视频图片换脸神器来了!目前最强的AI视频换脸工具Swapface!
    之前发过一款AI换脸工具,可惜部署门槛太高,有没有换头换脸的AI工具?今天就给你们安排到家!SwapfaceAI工具一键开箱包‍(一键整合包添加下方领取~)它使用先进的人工智能和计算机视觉技术,可以在几秒内为你的视频生成逼真的面部替换效果。无需任何复杂的参数设置,你只需要上......
  • [题解]AT_abc253_g [ABC253G] Swap Many Times
    思路首先,不难看出一个规律,就是对于一个序列\(a\),如果它将操作所有以\(x\)为第一关键字的二元组,那么序列的\(a_{x\simn}\)将循环右移一位。(注意,在这里的\(x\)指的是在\(1\sim(n-1)\)中的任意一个定值)那么,我们就可以将编号分别为\(l\simr\)的这些二元组分为三......
  • uniswap、pancakeswap、shadowswap、有什么区别
    Uniswap、PancakeSwap和ShadowSwap是三个不同的去中心化交易所(DecentralizedExchanges,简称DEXs),它们在各自的区块链生态系统中运作,并且有各自的特点和优势。下面是它们之间的一些主要区别:Uniswap平台:Uniswap是在以太坊区块链上运行的最著名的去中心化交易所之一。机制:它......
  • LeetCode 2340. Minimum Adjacent Swaps to Make a Valid Array
    原题链接在这里:https://leetcode.com/problems/minimum-adjacent-swaps-to-make-a-valid-array/description/题目:Youaregivena 0-indexed integerarray nums.Swaps of adjacent elementsareabletobeperformedon nums.A valid arraymeetsthefollowingco......
  • 内存交换空间(swap)
    内存交换空间(swap)swap是磁盘上的一块区域,是一种增加系统虚拟内存(磁盘空间充当内存)的特殊分区或文件。当系统的物理内存(RAM)不足以满足应用程序的运行需求时,Linux内核会使用swap临时存储不活跃的内存页,从而释放出物理内存供活跃进程使用。swap的原理swap的原理是基于操......
  • Python: faces Swap
     #encoding:utf-8#版权所有2024©涂聚文有限公司#许可信息查看:两个头像图片之间换脸#描述:https://stackoverflow.com/questions/902761/saving-a-numpy-array-as-an-image?answertab=votes#Author:geovindu,GeovinDu涂聚文.#IDE:PyCharm2023.1......
  • uniswap v2 类比
    当然,以下是生活中的类比,帮助你理解UniswapV2的核心概念:1.自动化做市商(AMM)生活中的例子:自动售货机解释:自动售货机内部有一种商品(如饮料)和一定的库存。用户通过投币购买饮料,机器根据设定的价格公式决定每次交易的价格。类似地,Uniswap使用恒定乘积公式来确定代币交换的价格......
  • 了解 Uniswap V2(DEX)
    UniswapV2是一个基于以太坊的去中心化交易所(DEX),它通过流动性池和自动化做市商(AMM)模型来实现去中心化的代币交换。以下是UniswapV2的核心概念:1.自动化做市商(AMM)Uniswap使用自动化做市商模型(AMM),这意味着交易对通过数学公式而不是订单簿来确定价格。UniswapV2使用恒定乘积......
  • Uniswap V2 核心
    UniswapV2核心UniswapV2FactoryUniswapV2PairUniswapV2ERC20IUniswapV2Router021.UniswapV2Factory合约UniswapV2Factory是工厂合约,主要负责创建和管理交易对。它是UniswapV2系统的核心管理部分。主要功能:创建交易对:工厂合约可以创建新的交易对(流动性......