#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; } |
English