Cod sursa(job #3351328)

Utilizator nstefanNeagu Stefan nstefan Data 18 aprilie 2026 16:50:22
Problema Secventa 5 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
// aflam cate subsecvente contin maxim U elemente distincte (cntU) si din ele scadem numarul
// de subsecvente cu maxim L - 1 elemente distincte (cntL)
#include <iostream>
#include <vector>
#include <fstream>
#include <unordered_map>
#define int long long
using namespace std;

// numarul de subsecvente cu cel mult `upperBound` elemente distincte
int countSubseq(int upperBound, vector<int>& numbers) {
  unordered_map<int, int> frq;

  int ans = 0;
  int left = 0;
  // two pointers invariant: [left, right] always has <= U distinct elements
  for (int right = 0; right < numbers.size(); right++) {
    frq[numbers[right]]++;
    while (frq.size() > upperBound and left < right) {
      frq[numbers[left]]--;
      if (frq[numbers[left]] == 0) frq.erase(numbers[left]);
      left++;
    }
    ans += right - left + 1;
  }

  return ans;
}

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

  int N, L, U;
  fin >> N >> L >> U;

  vector<int> numbers(N);
  for (int i = 0; i < N; i++)
    fin >> numbers[i];

  fout << countSubseq(U, numbers) - countSubseq(L - 1, numbers);

  return 0;
}