CF911D Inversion Counting

题目链接: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\n");
27         else    printf("even\n");
28     }
29     return 0;
30 }

 

posted @ 2018-02-13 23:50  Blogggggg  阅读(186)  评论(0)    收藏  举报