Cod sursa(job #2858490)

Utilizator Botnaru_VictorBotnaru Victor Botnaru_Victor Data 27 februarie 2022 17:56:41
Problema Secventa 5 Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <bits/stdc++.h>
#define nmax (1<<20)+5
using namespace std;

ifstream f("secv5.in");
ofstream g("secv5.out");

int n,l,u,fr[nmax];
int s[nmax],nor[nmax];
long long v[nmax];
int el;

void mod(int nr, bool rem=0)
{
    if(rem)
    {
        fr[nr]--;
        el-=(fr[nr]==0);
        return;
    }
    el+=(fr[nr]==0);
    fr[nr]++;

}


bool cmp(const int &a, const int &b)
{
    return v[a]<v[b];
}
int main()
{
    f>>n>>l>>u;
    for(int i=0;i<n;i++)
    {
        f>>v[i];
        s[i]=i;
    }

    sort(s,s+n,cmp);
    for(int i=0;i<n;i++)
    {
        //g<<s[i]<<','<<v[s[i]]<<' ';
        if(i>0&&v[s[i]]==v[s[i-1]])
            nor[s[i]]=nor[s[i-1]];
        else
            nor[s[i]]=i;
    }

    int ans=0;
    int j=0;
    //add big
    for(int i=0;i<n;i++)
    {
        mod(nor[i]);
        while(j<=i&&el>u)
        {
            mod(nor[j],1);
            j++;
        }
        //g<<i-j+1<<' ';
        ans+=(i-j+1);
    }
    //g<<'\n';

    //rebound


    while(j<n)
    {
        mod(nor[j],1);
        j++;
    }
    j=0;

    //remove smol
    for(int i=0;i<n;i++)
    {
        mod(nor[i]);
        while(j<=i&&el>=l)
        {
            mod(nor[j],1);
            j++;
        }
        //g<<i-j+1<<' ';
        ans-=(i-j+1);
    }
    //g<<'\n';
    g<<ans;

}