Cod sursa(job #3227289)

Utilizator lensuLensu Alexandru lensu Data 29 aprilie 2024 12:12:56
Problema Secventa 5 Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <fstream>
#include <queue>
#include <map>
#include <unordered_map>
#define int long long

using namespace std;

ifstream cin("secv5.in");
ofstream cout("secv5.out");

const int NMAX = 2e6;
int v[NMAX], n, l, r;

int secvmax(int cate)
{
    unordered_map<int,int> m;
    deque<int> dq;
    int distincte = 0, ans = 0;

    for(int i = 1; i <= n; i++)
    {
        dq.push_back(i);
        if(m[v[i]] == 0)
            distincte++;
        m[v[i]]++;
        while(distincte > cate)
        {
            m[v[dq.front()]]--;
            if(m[v[dq.front()]] == 0)
                distincte--;
            dq.pop_front();
        }
        ans = ans + i - dq.front() + 1;
    }

    return ans;
}

signed main()
{
    cin >> n >> l >> r;

    for(int i = 1; i <= n; i++)
    {
        cin >> v[i];
    }

    cout << secvmax(r) - secvmax(l - 1);
}