Cod sursa(job #2546515)

Utilizator stefantagaTaga Stefan stefantaga Data 14 februarie 2020 11:21:20
Problema Secventa 5 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("secv5.in");
ofstream g("secv5.out");
map <int,int> m;
int v[2000005],n,l,u,nr,i,q,suma,sum[2000005],st,dr,fr[2000005],pozitie;
struct wow
{
    int nr,fr;
}numere[2000000];
int main()
{
    f>>n>>l>>u;
    for (i=1;i<=n;i++)
    {
        f>>v[i];
        m[v[i]]=1;
    }
    for (auto ind:m)
    {
        nr++;
        m[ind.first]=nr;
    }
    for (i=1;i<=n;i++)
    {
        v[i]=m[v[i]];
    }
    for (i=1;i<=n;i++)
    {
        if (v[i]!=v[i-1])
        {
            numere[++q].nr=v[i];
            numere[q].fr=1;
        }
        else
        {
            numere[q].fr++;
        }
    }
    for (i=1;i<=q;i++)
    {
        sum[i]=sum[i]+sum[i-1]+numere[i].fr;
    }
    nr=0;
    st=1;
    dr=0;
    for (i=1;i<=q;i++)
    {
        if (fr[numere[i].nr]==0)
        {
            fr[numere[i].nr]+=numere[i].fr;
            nr++;
            dr++;
        }
        else
        {
            fr[numere[i].nr]+=numere[i].fr;
        }
        pozitie++;
        if (nr==l)
        {
            pozitie=st;
        }
        while (nr>u)
        {
            fr[numere[st].nr]-=numere[st].fr;
            if (fr[numere[st].nr]==0)
            {
                nr--;
            }
            st++;
        }
        if (l<=nr&&nr<=u)
        {
            suma=suma+(sum[pozitie]-sum[st-1])*numere[i].fr;
        }
    }
    g<<suma;
    return 0;
}