兔子的逆序對

2021-10-22 16:01:27 字數 1427 閱讀 1884

兔子的逆序對(歸併排序做法)

序言題目描述

輸入格式

第一行乙個整數 n,表示序列的大小。

第二行 n 個整數ai 表示序列的各個元素。

第三行乙個整數m,表示操作個數。

接下來 m 行,每行兩個整數 l,r,表示反轉的區間。

輸出格式

輸出共m行每行乙個字串,表示反轉後序列逆序對個數的奇偶性,如果是逆序對個數奇數,輸出"dislike"(不含引號),如果是偶數,輸出"like"。

標準輸入

41 2 3 4

41 2

3 41 4

2 3標準輸出

dislike

like

like

dislike

說明注意:以下的(i,j)指的是位置 i 和位置 j

a= 的逆序對是 (1,2) 共1個,1是奇數,所以是dislike

a= 的逆序對是 (1,2) (3,4)共2個,2是偶數,所以是like

a= 的逆序對是 (1,3) (1,4) (2,3) (2,4)共4個,4是偶數,所以是like

a= 的逆序對是 (1,2) (1,4) (3,4) 共3個,3是奇數,所以是dislike

備註對於20%的資料

1 ≤ n ≤ 100

1 ≤ m ≤ 10

對於40%的資料

1 ≤ n ≤ 2000

1 ≤ m ≤ 50

對於60%的資料

1 ≤ n ≤ 2000

1 ≤ m ≤ 104

對於100%的資料

1 ≤ n ≤ 105 //此為最大的資料量輸入 1e5,所以我們建陣列要大一點

1 ≤ m ≤ 2*106

對於所有資料 l ≤ r且 ai 是n的乙個排列,即ai互不相同且ai ≤ n

由於讀入資料較大,建議使用快速讀入。

**

#includeusing namespace std;

int q[100005],temp[100005];//建立資料輸入所需要的的陣列和臨時陣列

int ans;//進行奇偶性判斷

void mergesort(int q,int l ,int r)//歸併排序模板

} while(i<=mid) temp[k++]=q[i++];

while(j<=r) temp[k++]=q[j++];

for(int i=l,j=0;i<=r;i++,j++) q[i]=temp[j];

}int main()

{ int n,m;

cin>>n;

for(int i=0;i解題思路

思路可參考:

兔子的逆序對

兔子的逆序對 時間限制 c c 1秒,其他語言2秒 空間限制 c c 131072k,其他語言262144k 64bit io format lld 第一行乙個整數 n,表示序列的大小。第二行 n 個整數ai 表示序列的各個元素。第三行乙個整數m,表示操作個數。接下來 m 行,每行兩個整數 l,r,...

兔子的逆序對

輸出描述 輸出共m行每行乙個字串,表示反轉後序列逆序對個數的奇偶性,如果是逆序對個數奇數,輸出 dislike 不含引號 如果是偶數,輸出 like 示例1輸入 41 2 3 4 41 2 3 41 4 2 3輸出 dislike like like dislike 說明注意 以下的 i,j 指的是...

NC20861兔子的逆序對

首先吐槽 這只兔子的事真多 首先,啊,不對,假裝沒寫 second,一定要看備註 用快讀 第三 cout會t,printf不會 這其實就是先求出逆序對的數量 就是歸併排序 然後就非常簡單了 這裡有一條重要資訊 乙個排序中任意兩個元素對換,排列會改變逆序數 於是我們可以在反轉區間上找找規律 設反轉區間...