Cod sursa(job #2008604)

Utilizator tziplea_stefanTiplea Stefan tziplea_stefan Data 6 august 2017 23:36:38
Problema Secventa 5 Scor 0
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul I Marime 1.25 kb
#include <fstream>
#include <unordered_map>
#define VAL 1050005

using namespace std;

ifstream fin("secv5.in");
ofstream fout("secv5.out");

int N, L, U, i, j;
int v[VAL], a[VAL];
int b[VAL], be, nr;
long long ANS;
unordered_map <int, int> H;

int main()
{
    fin >> N >> L >> U;
    be=1;
    for (i=1; i<=N; i++)
      fin >> v[i];
    i=0;
    while (nr<L)
    {
        i++;
        H[v[i]]++;
        if (H[v[i]]==1)
          nr++;
    }
    H.clear();
    j=nr=0;
    while (nr<U)
    {
        j++;
        H[v[j]]++;
        if (H[v[j]]==1)
          nr++;
    }
    ANS=j-i+1;
    a[j]=be=1;
    for (i=j+1; i<=N; i++)
    {
        H[v[i]]++;
        if (H[v[i]]==1)
          nr++;
        while (nr>U)
        {
            H[v[be]]--;
            if (H[v[be]]==0)
              nr--;
            be++;
        }
        a[i]=be;
    }
    H.clear();
    nr=U;
    for (i=1; i<j; i++)
      H[v[i]]++;
    be=1;
    for (i=j; i<=N; i++)
    {
        H[v[i]]++;
        if (H[v[i]]==1 && i!=j)
          nr++;
        while (nr>L)
        {
            H[v[be]]--;
            if (H[v[be]]==0)
              nr--;
            be++;
        }
        b[i]=be;
        ANS+=b[i]-a[i]+1;
    }
    fout << ANS << '\n';
    fin.close();
    fout.close();
    return 0;
}