题目链接:http://codeforces.com/contest/911/problem/D
知识点: 暴力
解题思路:
先暴力算出所有的逆序对数,得出原始的奇偶性。
对于每一次倒置,不难发现:非逆序对和逆序对会互相转化,原来的非逆序对会变成逆序对,逆序对会变成非逆序对。所以,如果倒置的区间中有奇数个数对,那么逆序对数的奇偶性会变换,导致整体的奇偶性变换;否则整体奇偶性不变。
AC代码:
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 const int maxn = 1510; 5 int a[maxn]; 6 int main(){ 7 int n; 8 scanf("%d",&n); 9 for(int i=1;i<=n;i++) scanf("%d",&a[i]); 10 int have=0; 11 for(int i=1;i<=n;i++){ 12 for(int j=i+1;j<=n;j++){ 13 if(a[i]>a[j]) have++; 14 } 15 } 16 bool odd; 17 if(have%2==1) odd=true; 18 else odd=false; 19 int m,l,r; 20 scanf("%d",&m); 21 for(int i=0;i<m;i++){ 22 scanf("%d%d",&l,&r); 23 int shu=r-l+1; 24 int dui=shu*(shu-1)/2; //求出数对数 25 if(dui%2==1) odd=!odd; 26 if(odd) printf("odd "); 27 else printf("even "); 28 } 29 return 0; 30 }