[SMOJ1787]逆序对

博客探讨了在全排列中,每次交换两个数时逆序对数的变化,并提供了两种算法思路,一种是暴力模拟,另一种是预先计算逆序对数然后根据交换情况进行取反。通过分析证明了每次交换会增加或减少奇数对逆序对,从而得出对2取模的答案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

Smart 得到了一个 1~ n 的全排列。

Smart 每次会交换第 i 个数和第 j 个数,对于每一次交换,Smart 需要 Sarah 回答该全排列的逆序对数为多少。

“1、2、3、4、………、248289469!”Sarah 如是回答到。

Smart 觉得答案数太大,不太好判断是否正确,所以只需回答最后答案取模 2 的结果。

输入格式 1787.in

第一行一个整数 n

第二行为 1~ n 的某个全排列;

第三行一个整数 m ,表示交换操作的次数。

接下来 m 行,每行两个数 i j

输出格式 1787.out

输出 m 行,每行包含一个整数表示交换后答案。

输入样例 1787.in

1
1 2 3 4
1
1 2

输出样例 1787.out

1

数据范围

30%的数据: n,m1000
100%的数据: n,m100000


本题看似复杂,但破解了其中的奥妙之后,编码量十分短。

做法一:暴力做
直接按题意模拟,每次交换两个元素重新求逆序对
时间复杂度:取决于求逆序对的算法,两重 for 循环为 O(m×n2) 树状数组 O(m×nlo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值