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