Pagini recente » Diferente pentru implica-te/arhiva-educationala intre reviziile 34 si 35 | Cod sursa (job #1007619) | Cod sursa (job #1383681) | Cod sursa (job #604249) | Cod sursa (job #2326942)
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int MAXN = 1e5;
unordered_map <ll, int> car;
ll a[MAXN + 1];
int n;
ll solve (int k) {
int st, dr, nr_dist;
ll sol;
if (k == 0)
return 0;
for (int i = 1; i <= MAXN; i++)
car[i] = 0;
st = 1;
dr = 1;
nr_dist = 1;
car[a[1]]++;
sol = 0;
while (st <= n) {
while (dr < n && ((car[a[dr + 1]] > 0 && nr_dist <= k) || (car[a[dr + 1]] == 0 && nr_dist < k))) {
dr++;
if (car[a[dr]] == 0)
nr_dist++;
car[a[dr]]++;
}
sol = sol + (dr - st + 1);
car[a[st]]--;
if (car[a[st]] == 0)
nr_dist--;
st++;
}
return sol;
}
int main() {
int p, q, i;
freopen ("secv5.in", "r", stdin);
freopen ("secv5.out", "w", stdout);
scanf ("%d%d%d", &n, &p, &q);
for (i = 1; i <= n; i++)
scanf ("%lld", &a[i]);
printf ("%lld\n", solve (q) - solve (p - 1));
return 0;
}