Codeforce-911D逆序对

Posted wx62a8776062513

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforce-911D逆序对相关的知识,希望对你有一定的参考价值。


题干:

​Problem - D - Codeforces​

【Codeforce-911D】逆序对_数据结构

 解题报告:

不难发现,假设n的倒序排列(n,n-1,...,3,2,1)的逆序对是x,则对n的任意一个逆序对数为y的排列做翻转,新生成的排列的逆序对数位x-y。

因此这题作为奇偶性,其实只需要关注该翻转区间的【倒序排列的逆序对】就可以了,关于【倒序排列的逆序对】,可以直接用求和公式去算,也可以找到规律,随着翻转区间的长度的增长,奇偶性分别为【奇奇偶偶奇奇偶偶奇奇偶偶】以此类推,所以其实只需要看【区间长度/2】的奇偶就可以了。

AC代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;

int a[10005], n, m;
int main()
cin>>n;
for(int i = 1; i<=n; i++)
cin>>a[i];

int cnt = 0;
for(int i = 1; i<=n; i++)
for(int j = i+1; j<=n;j++)
if(a[i] > a[j]) cnt ++;


cnt %= 2;
cin>>m;
for(int l,r,i = 1; i<=m; i++)
cin>>l>>r;
// int x = (r-l) * (r-l+1) / 2; 这样也可以
int x = ((r-l+1)/2)%2;
cnt = (cnt + x%2) % 2;
if(cnt%2 == 1) cout << "odd" << endl;
else cout << "even" << endl;


return 0;

以上是关于Codeforce-911D逆序对的主要内容,如果未能解决你的问题,请参考以下文章

AC日记 - - - 25——整数位

C语言任意输入一个有五位数字的正整数,逆序输出每一数位上的数字 如输入12345 输出5 4 3 2 1

BZOJ 3333 排队计划 树状数组+线段树

bzoj2431:[HAOI2009]逆序对数列

AtCoder ARC 101 D Median of Medians(逆序对)

逆序对