Codeforce-911D逆序对
Posted wx62a8776062513
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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逆序对的主要内容,如果未能解决你的问题,请参考以下文章
C语言任意输入一个有五位数字的正整数,逆序输出每一数位上的数字 如输入12345 输出5 4 3 2 1