inversions
time limit per test: 0.25 sec.
memory limit per test: 4096 kb
input: standard
output: standard
there are n integers (1<=n<=65537) a1, a2,.. an (0<=ai<=10^9). you need to find amount of such pairs (i, j) that 1<=ia[j].
input
the first line of the input contains the number n. the second line contains n numbers a1...an.
output
write amount of such pairs.
sample test(s)
input
5 2 3 1 5 4
output
3這道題需要離散,樹狀陣列求逆序對是離散後,統計加入該元素時當前陣列中
已經存在多少個比它大的數,這就是該數作為逆序對後者的貢獻度,然後就可以
求解了,一般需要離散化。
1 #include2 #include3 #include4 #include5 #include6#define n 70007
7using
namespace
std;89
intn;
10long
long
ans;
11int
b[n],c[n];
12struct
node
13a[n];
1617
bool
cmp(node x,node y)
1821
int lowbit(int
x)22
25void change(int x,int
y)26
30int query(int
x)31
37int
main()
3845 sort(a+1,a+n+1
,cmp);
46int cnt=0;47
for (int i=1;i<=n;i++)
4852
for (int i=1;i<=n;i++)
5357 printf("
%lld
",ans);
58 }
逆序對 離散樹狀陣列
求逆序對有三種以上方法 1 離散樹狀陣列,2 線段樹,3 歸併排序 今天做了下洛谷的p1908逆序對 1 一開始用樹狀陣列,一直re,後來在發現自己一直忽略離散化。include include using namespace std const int maxn 400000 5 typedef ...
樹狀陣列 (離散化 樹狀陣列 求逆序對)
sample test s input 52 3 1 5 4 output 3 題目大意 求逆序對的個數 題目分析 求逆序對有很多方法,比如說用合併排序 分治 樹狀陣列 線段樹,甚至連暴力 氣泡排序 也可以做,但是要注意會不會超時。這裡就講一下樹狀陣列的方法,這一題最有意思的是離散化的方法,這個方法...
樹狀陣列求逆序對及離散化
樹狀陣列求逆序對及離散化 逆序對指的是乙個序列中有兩個數ai和aj,iaj,即它們下標與數值的增減不一致,那麼對於這個問題 求乙個序列中逆序對的個數,該如何解決呢?我最初接觸到的方法是歸併排序,是個很不錯的方法,但是對於向我一樣的蒟蒻 還是有理解難度,而今天講的樹狀陣列解法,至少 理解難度降低了不少...