Cod sursa(job #3354349)

Utilizator octavP18Podan Octvavin octavP18 Data 17 mai 2026 17:34:46
Problema Secventa 5 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <iostream>

#include <fstream>

#include <map>

#include <algorithm>

#include <vector>

#include <string>

using namespace std;

#define all(x) x.begin(), x.end()

using namespace std;

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


const int nmax = (1 << 20);

int n, l, r;
int v[nmax + 5];

int secvente(int l, int r) {
	int secv = 0;
	map<int, int> fr1;
	map<int, int> fr2;
	int d1 = 0;
	int d2 = 0;
	/// dr1 -> cea mai mica pozitie unde int[st, dr1] contine exact l elem dist
	/// dr2 -> cea mai mica pozitie unde int[st, dr2] contine exact r elem dist
	for (int st = 1, dr1 = 0, dr2 = 0; st <= n; ++st) {
		while (dr1 < n and d1 < l) {
			fr1[v[++dr1]]++;
			d1 += (fr1[v[dr1]] == 1);
		}
		while (dr2 < n and d2 <= r) {
			fr2[v[++dr2]]++;
			d2 += (fr2[v[dr2]] == 1);
		}
		if (d2 > r) --dr2;
		if (d1 == l and d2 <= r) {
			secv += dr2 - dr1 + 1;
		}
		fr1[v[st]]--;
		fr2[v[st]]--;
		d1 -= (fr1[v[st]] == 0); d2 -= (fr2[v[st]] == 0);
		/*
		fout << st << " " << dr1 << " " << dr2 << '\n';
		fout << "de la " << st << " la " << dr1 << " sunt " << d1 << " elem dist\n";
		fout << "de la " << st << " la " << dr2 << " sunt " << d2 << " elem dist\n";
		*/
	}
	return secv;
}

int main() {

	fin >> n >> l >> r;
	for (int i = 1; i <= n; ++i) {
		fin >> v[i];
	}
	fout << secvente(l, r);


}