蒜頭君是乙個愛思考的好孩子,這一天他學習了氣泡排序,於是他就想,把乙個亂序排列通過氣泡排序排至公升序需要多少次交換,這當然難不倒他,於是他想來點刺激的,給定乙個 1 \ldots n
1…n 的排列,每次從該排列中選擇乙個區間 [l,r]
[l,r
],問使用氣泡排序將該區間排至公升序需要多少次交換操作。
第一行乙個整數 n
n,表示排列長度。
接下來一行 n
n 個整數,表示該排列。
接下來一行乙個整數 m
m,表示詢問次數。
接下來 m
m 行,每行 2
2 個整數 l,r
l,r,表示詢問 [l,r]
[l,r
] 區間。
輸出 m
m 行,每行 1
1 個整數,第 i
i 行表示第 i
i 個詢問的答案。
對於 30
30% 的資料,滿足 1 \le n,m \le 300
1≤n,m≤
300;
對於 60
60% 的資料,滿足 1 \le n,m \le 1000
1≤n,m≤
1000
;對於 100
100% 的資料,滿足 1 \le n,m \le 30000,
1≤n,m≤
3000
0, ll
\sum | l[i]-l[i-1] |\ +
∑∣l[i]
−l[i
−1]∣
+\sum | r[i]-r[i-1] | \le
∑∣r[i]
−r[i
−1]∣
≤ 7 \times 10^6
7×106
。
樣例輸入10
9 8 7 4 5 6 10 3 2 1
52 4
8 10
2 85 9
4 9
樣例輸出
331379
題目**
2017
noip 提高組模擬賽(一)day2
#include#include#include#includeusing namespace std;int n,m,a[100100],l,r,c[100100],ll=1,lr=0,ans;
int low(int x)
void add(int x,int val)}
int ask(int x)return cnt;}
int main()
while(lll)
printf("%d\n",ans);
} return 0;
}
蒜頭君的排序
蒜頭君的排序 蒜頭君是乙個愛思考的好孩子,這一天他學習了氣泡排序,於是他就想,把乙個亂序排列通過氣泡排序排至公升序需要多少次交換,這當然難不倒他,於是他想來點刺激的,給定乙個 1 ldots n1 n 的排列,每次從該排列中選擇乙個區間 l,r l,r 問使用氣泡排序將該區間排至公升序需要多少次交換...
蒜頭君的排序
蒜頭君是乙個愛思考的好孩子,這一天他學習了氣泡排序,於是他就想,把乙個亂序排列通過氣泡排序排至公升序需要多少次交換,這當然難不倒他,於是他想來點刺激的,給定乙個 1 ldots n1 n 的排列,每次從該排列中選擇乙個區間 l,r l,r 問使用氣泡排序將該區間排至公升序需要多少次交換操作。第一行乙...
樹狀陣列 求逆序對 排序
首先需要了解逆序對是什麼 逆序對就是如果i j a i a j 這兩個就算一對逆序對。其實也就是對於每個數而言,找找排在其前面有多少個比自己大的數。那麼思路就來了,樹狀陣列又一次地優化了這種 需要遍歷 的情況。那不就很容易了嗎?依次把序列裡的數放到樹狀陣列中的a i 上去 實際是以c i 形式的插入...