Cod sursa(job #2469562)

Utilizator mirceatlxhaha haha mirceatlx Data 7 octombrie 2019 18:39:55
Problema Secventa 5 Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <map>
#include <stdio.h>
#define maxMemory 1 << 20 + 5
using namespace std;

unsigned int v[maxMemory], N, L, U;


long long solve(int disElem)
{
    long long result = 0;
    int st,dr;
    st = dr = 1;
    map <unsigned int , int> mapp;
    for(dr = 1; dr <= N; dr++)
    {
        mapp[v[dr]]++;
        while(mapp.size() > disElem)
        {
            mapp[v[st]]--;
            if(mapp[v[st]] == 0)
                mapp.erase(v[st]);
            st++;
        }
        result = 1LL * result + dr - st + 1;
    }

    return result;
}

int main()
{
    freopen("secv5.in","r",stdin);
    freopen("secv5.out","w",stdout);

    scanf("%d%d%d",&N,&L,&U);
    for(int i = 1; i <= N; i++)
        scanf("%d",&v[i]);

    printf("%lld\n",solve(U) - solve(L - 1));
    return 0;
}