#include<bits/stdc++.h> #include "message.h" #include "teatr.h" using namespace std; long long int n,k,i,r=1,w,p,tab[2200007]; void insert(long long int x, long long int pp, long long int pk, long long int zp, long long int zk) { long long int sr=(pp+pk)/2; if(pk < zp || pp > zk) { return; } if(pp >= zp && pk <= zk) { tab[x]++; return; } insert(2*x, pp, sr, zp, zk); insert(2*x+1, sr+1, pk, zp, zk); } long long int query(long long int x) { long long int res=0; while(x > 0) { // printf("TEST tab[%lld]=%lld;\n", x, tab[x]); res+=tab[x]; x/=2; } return res; } int main() { if(MyNodeId() == 0) { // scanf("%lld", &n); n=GetN(); while(r < n) { r*=2; } for(i=0; i<n; i++) { // scanf("%lld", &k); k=GetElement(i); w+=query(k+r-1); insert(1, 1, r, 1, k-1); } // for(i=1; i<2*r; i++) // { // printf("%lld ", tab[i]); // } printf("%lld", w); return 0; } }
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 53 54 55 56 57 | #include<bits/stdc++.h> #include "message.h" #include "teatr.h" using namespace std; long long int n,k,i,r=1,w,p,tab[2200007]; void insert(long long int x, long long int pp, long long int pk, long long int zp, long long int zk) { long long int sr=(pp+pk)/2; if(pk < zp || pp > zk) { return; } if(pp >= zp && pk <= zk) { tab[x]++; return; } insert(2*x, pp, sr, zp, zk); insert(2*x+1, sr+1, pk, zp, zk); } long long int query(long long int x) { long long int res=0; while(x > 0) { // printf("TEST tab[%lld]=%lld;\n", x, tab[x]); res+=tab[x]; x/=2; } return res; } int main() { if(MyNodeId() == 0) { // scanf("%lld", &n); n=GetN(); while(r < n) { r*=2; } for(i=0; i<n; i++) { // scanf("%lld", &k); k=GetElement(i); w+=query(k+r-1); insert(1, 1, r, 1, k-1); } // for(i=1; i<2*r; i++) // { // printf("%lld ", tab[i]); // } printf("%lld", w); return 0; } } |