#include "teatr.h"
#include "message.h"
#include<bits/stdc++.h>
#define f first
#define s second
using namespace std;
const int MAXN=1e6+13;
int tree[4*MAXN];
int sprawdz (int v, int x, int y, int a)
{
if (y<a)
return 0;
if (x>=a)
return tree[v];
return sprawdz (v*2, x, (x+y)/2, a)+sprawdz (v*2+1, (x+y)/2+1, y, a);
}
void dodaj (int x)
{
while (x>0)
{
tree[x]++;
x/=2;
}
}
int main()
{
int n,x;
long long wyn=0;
int pot=1;
//scanf ("%d", &n);
if (MyNodeId()!=0)
return 0;
n=GetN();
while (pot<n)
pot*=2;
for (int i=0; i<n; i++)
{
x=GetElement(i);
//scanf ("%d", &x);
wyn+=(long long)(sprawdz (1,1,pot,x+1));
dodaj (x+pot-1);
}
printf ("%lld", wyn);
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 | #include "teatr.h" #include "message.h" #include<bits/stdc++.h> #define f first #define s second using namespace std; const int MAXN=1e6+13; int tree[4*MAXN]; int sprawdz (int v, int x, int y, int a) { if (y<a) return 0; if (x>=a) return tree[v]; return sprawdz (v*2, x, (x+y)/2, a)+sprawdz (v*2+1, (x+y)/2+1, y, a); } void dodaj (int x) { while (x>0) { tree[x]++; x/=2; } } int main() { int n,x; long long wyn=0; int pot=1; //scanf ("%d", &n); if (MyNodeId()!=0) return 0; n=GetN(); while (pot<n) pot*=2; for (int i=0; i<n; i++) { x=GetElement(i); //scanf ("%d", &x); wyn+=(long long)(sprawdz (1,1,pot,x+1)); dodaj (x+pot-1); } printf ("%lld", wyn); return 0; } |
English