Cod sursa(job #432662)
#include <cstdio>
#include <algorithm>
#define maxn 100100
using namespace std;
int sir[maxn],sorted[maxn],a[4*maxn];
int n,s,val,poz;
int start,finish,sum;
bool cmp(int x, int y)
{
if(sir[x]!=sir[y])
return sir[x]<sir[y];
return x<y;
}
void update(int nod, int st, int dr)
{
if(st==dr)
{
a[nod]++;
return;
}
else
{ int mij=(st+dr)/2;
if(poz<=mij)
update(nod*2,st,mij);
else
update(nod*2+1,mij+1,dr);
a[nod]=(a[nod*2]+a[nod*2+1])%9917;
}
}
void query(int nod, int st, int dr)
{
if(start<=st && dr<=finish)
{
sum+=a[nod];
return;
}
int mij=(st+dr)/2;
if(start<=mij)
query(nod*2,st,mij);
if(mij<finish)
query(nod*2+1,mij+1,dr);
}
int main()
{
freopen("inv.in","r",stdin);
freopen("inv.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&sir[i]);
sorted[i]=i;
}
sort(sorted+1,sorted+1+n,cmp);
for(int i=1;i<=n;i++)
{
poz=sorted[i];
start=poz+1;
finish=n;
sum=0;
query(1,1,n);
s+=sum;
s%=9917;
update(1,1,n);
}
printf("%d\n",s);
fclose(stdout);
return 0;
}