#include "message.h" #include "teatr.h" #include <bits/stdc++.h> #define Ssize 8388608 #define lld long long int using namespace std; int tab[10000010]; int tree[Ssize*2+10]; lld licz; int N; lld query(lld gdzie, lld pocz, lld kon, lld x, lld y) { if(pocz>y or kon<x) { return 0; } if(pocz>=x and kon<=y) { return tree[gdzie]; } lld w =0; w+=query(gdzie*2,pocz,(pocz+kon)/2,x,y); w+=query(gdzie*2+1,(pocz+kon)/2+1,kon,x,y); return w; } void add(lld gdzie) { while(gdzie>=1) { ++tree[gdzie]; gdzie>>=1; } } int main() { if(MyNodeId() != 0) return 0; N = GetN(); for(int i=0; i<N; i++) { tab[i] = GetElement(i); } for(int i = 0;i<N;++i) { licz+=query(1,Ssize,Ssize*2-1,Ssize+tab[i],Ssize*2-1); add(tab[i]+Ssize); } printf("%lld",licz); } /* 6 2 5 1 3 4 3 */
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #include "message.h" #include "teatr.h" #include <bits/stdc++.h> #define Ssize 8388608 #define lld long long int using namespace std; int tab[10000010]; int tree[Ssize*2+10]; lld licz; int N; lld query(lld gdzie, lld pocz, lld kon, lld x, lld y) { if(pocz>y or kon<x) { return 0; } if(pocz>=x and kon<=y) { return tree[gdzie]; } lld w =0; w+=query(gdzie*2,pocz,(pocz+kon)/2,x,y); w+=query(gdzie*2+1,(pocz+kon)/2+1,kon,x,y); return w; } void add(lld gdzie) { while(gdzie>=1) { ++tree[gdzie]; gdzie>>=1; } } int main() { if(MyNodeId() != 0) return 0; N = GetN(); for(int i=0; i<N; i++) { tab[i] = GetElement(i); } for(int i = 0;i<N;++i) { licz+=query(1,Ssize,Ssize*2-1,Ssize+tab[i],Ssize*2-1); add(tab[i]+Ssize); } printf("%lld",licz); } /* 6 2 5 1 3 4 3 */ |