Cod sursa(job #3324861)

Utilizator IanisBelu Ianis Ianis Data 23 noiembrie 2025 20:15:39
Problema Secventa 5 Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <bits/stdc++.h>

using namespace std;

#ifdef LOCAL
ifstream fin("input.txt");
#define fout cout
#else
ifstream fin("secv5.in");
ofstream fout("secv5.out");
#endif

using ll = long long;

const int NMAX = 1e6+5;

int n, l, u;
int a[NMAX];
int fr[NMAX];

void read() {
   fin >> n >> l >> u;
   for (int i = 1; i <= n; i++) {
      fin >> a[i];
   }
}

void normalize() {
   vector<int> v;
   for (int i = 1; i <= n; i++) {
      v.push_back(i);
   }

   sort(v.begin(), v.end(), [&](int i, int j) {
      return a[i] < a[j];
   });

   int max_val = 1;
   int last_val = a[v[0]];
   a[v[0]] = 1;

   for (int i = 1; i < n; i++) {
      if (last_val != a[v[i]]) {
         last_val = a[v[i]];
         max_val++;
      }
      a[v[i]] = max_val;
   }
}

ll solve(int max_cnt) {
   if (max_cnt == 0) return 0;

   fill(fr, fr + n + 1, 0);

   ll ans = 0;
   int r = 0, cnt = 0;
   for (int l = 1; l <= n; l++) {
      while (r <= n && cnt <= max_cnt) {
         r++;
         fr[a[r]]++;
         if (fr[a[r]] == 1) {
            cnt++;
         }
      }
      ans += (r - 1) - l + 1;
      fr[a[l]]--;
      if (fr[a[l]] == 0) {
         cnt--;
      }
   }

   return ans;
}

signed main() {
   read();
   normalize();
   fout << solve(u) - solve(l - 1);
   return 0;
}