#include "message.h" #include "teatr.h" #include <bits/stdc++.h> using namespace std; #define SIZE 1048576 long long n,a,t[2*SIZE],w; void update(long long p) { p+=SIZE-1; ++t[p]; while (p>1) { p/=2; ++t[p]; } } long long query(long long p, long long q) { if (p>q) return 0; p+=SIZE-1; q+=SIZE-1; long long w=t[p]; if (p!=q) w+=t[q]; while (p/2!=q/2) { if (p%2==0) w+=t[p+1]; if (q%2==1) w+=t[q-1]; p/=2; q/=2; } return w; } void show() { for (long long i=1; i<2*SIZE; ++i) { printf("%lld ",t[i]); if ((i&(i+1))==0) printf("\n"); } } int main() { if (MyNodeId()>0) return 0; n=GetN(); for (long long i=0; i<n; ++i) { a=GetElement(i); w+=query(a+1,1000000); update(a); } printf("%lld\n",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 | #include "message.h" #include "teatr.h" #include <bits/stdc++.h> using namespace std; #define SIZE 1048576 long long n,a,t[2*SIZE],w; void update(long long p) { p+=SIZE-1; ++t[p]; while (p>1) { p/=2; ++t[p]; } } long long query(long long p, long long q) { if (p>q) return 0; p+=SIZE-1; q+=SIZE-1; long long w=t[p]; if (p!=q) w+=t[q]; while (p/2!=q/2) { if (p%2==0) w+=t[p+1]; if (q%2==1) w+=t[q-1]; p/=2; q/=2; } return w; } void show() { for (long long i=1; i<2*SIZE; ++i) { printf("%lld ",t[i]); if ((i&(i+1))==0) printf("\n"); } } int main() { if (MyNodeId()>0) return 0; n=GetN(); for (long long i=0; i<n; ++i) { a=GetElement(i); w+=query(a+1,1000000); update(a); } printf("%lld\n",w); return 0; } |