Pagini recente » Istoria paginii utilizator/morticia_pain | Monitorul de evaluare | Cod sursa (job #374383) | Cod sursa (job #224975) | Cod sursa (job #1993477)
#include <bits/stdc++.h>
using namespace std;
ifstream f("secv5.in");
ofstream g("secv5.out");
const int nmax = 1048600;
int a[nmax],b[nmax],ind[nmax], freq[nmax];
int i, j, n, l, u;
bool cmp(int x, int y) {
return a[x] < a[y];
}
long long variante(int MAX) {
int st = 1, i, apar = 0, cate = 0;
long long sol = 0;
memset(freq, 0, sizeof(freq));
for (i = 1; i <= n; i++) {
if (freq[b[i]] == 0)
cate++;
freq[b[i]]++;
while (st <= i && cate > MAX) {
freq[b[st]]--;
if (freq[b[st]] == 0) cate--;
st++;
}
sol += (i-st+1);
}
return sol;
}
int main() {
f >> n >> l >> u;
for (i = 1; i <= n; i++)
f >> a[i], ind[i] = i;
sort(ind+1,ind+n+1, cmp);
for (i = 1; i <= n; i++) {
b[ind[i]] = b[ind[i-1]];
if (a[ind[i]] != a[ind[i-1]])
b[ind[i]]++;
}
g << variante(u) - variante(l-1);
}