Pagini recente » Cod sursa (job #1564356) | Cod sursa (job #1805096) | Cod sursa (job #1407490) | Cod sursa (job #3169687) | Cod sursa (job #3121204)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
const int NMAX = (1 << 20) + 1;
struct Element {
unsigned val;
int poz;
};
Element v[NMAX];
int w[NMAX], F[NMAX];
int N;
ifstream f ("secv5.in");
ofstream g ("secv5.out");
bool comp (const Element &a, const Element &b) {
return a.val < b.val;
}
void normalizare() {
sort (v+1, v+N+1, comp);
int x = 1;
w[v[1].poz] = 1;
for (int i=2; i<=N; i++) {
if (v[i].val != v[i-1].val)
x++;
w[v[i].poz] = x;
}
}
long long calcul(int dif) {
long long nrSec = 0;
int nrDif = 0, p =1;
for (int i=1; i<=N; i++)
F[i] = 0;
for (int i=1; i<=N; i++) {
if (++F[w[i]] == 1)
++nrDif;
while (nrDif > dif && p<=i) {
if (--F[w[p]] == 0)
--nrDif;
++p;
}
nrSec += i-p+1;
}
return nrSec;
}
int main()
{
int L, U;
f >> N >> L >> U;
for (int i=1;i<=N; i++) {
f >> v[i].val;
v[i].poz = i;
}
normalizare();
g << calcul(U) - calcul(L-1);
return 0;
}