Cod sursa(job #3288451)

Utilizator ItsHezovPahonie George Alessio ItsHezov Data 22 martie 2025 13:40:03
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#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;
}