Pagini recente » Cod sursa (job #302510) | preoni2008-runda1-5-8 | Rating Vlad Cernoutan (Vlad_Cernoutan) | Cod sursa (job #3213239) | Cod sursa (job #3288451)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("inv.in");
ofstream cout("inv.out");
const int mxN = 1e5, MOD = 9917;
int n ;
int v[mxN+1], p[mxN+1],r[mxN+1],aib[mxN+1];
bool cmp(int a, int b)
{
return v[a] < v[b];
}
int ub(int x)
{
return (x&(-x));
}
void add(int poz, int val = 1)
{
for(int i = poz;i<=n;i+=ub(i))
aib[i]+=val;
}
int sum(int poz)
{
int sol = 0;
for(int i = poz;i>0;i-=ub(i))
sol+=aib[i];
return sol;
}
int sum(int l, int r)
{
return sum(r) - sum(l-1);
}
int main()
{
cin >> n;
for(int i = 1;i<=n;i++)
{
cin >> v[i];
p[i] = i;
}
// Normalizam vectorul v in r.
sort(p+1,p+n+1,cmp);
r[p[1]] = 1;
int rank = 1;
for(int i = 2;i<=n;i++)
{
if(v[p[i]]!=v[p[i-1]])
rank++;
r[p[i]] = rank;
}
int cnt = 0;
for(int i = 1;i<=n;i++)
{
cnt = (cnt + sum(r[i]+1,n))%MOD;
add(r[i]);
}
cout << cnt << '\n';
return 0;
}