Pagini recente » Cod sursa (job #2427013) | Cod sursa (job #2439793) | Cod sursa (job #2654188) | Cod sursa (job #3032127) | Cod sursa (job #2608854)
#include <fstream>
#include <cstdio>
#include <unordered_map>
using namespace std;
const int MAXN = (1<<20)+5;
unsigned int n, L, U;
unsigned int values[MAXN];
FILE *fin = fopen("secv5.in", "r");
int cursor = 0;
const int DIM = 1000050;
char buf[DIM];
void adv()
{
if (++cursor == DIM) {
cursor = 0;
fread(buf, DIM, 1, fin);
}
}
void readUnsigned(unsigned int &nr)
{
for (; buf[cursor] < '0' || buf[cursor] > '9'; adv());
for (nr = 0; buf[cursor] >= '0' && buf[cursor] <= '9'; adv())
nr = nr*10 + buf[cursor] - '0';
}
long long compute(unsigned int x)
{
unordered_map<unsigned int, int> m;
unsigned int st = 0;
long long sol = 0;
for (unsigned int dr = 0; dr < n; dr++) {
++m[values[dr]];
while (m.size() > x) {
if ((--m[values[st]]) == 0)
m.erase(values[st]);
++st;
}
sol += dr - st +1;
}
return sol;
}
int main()
{
ofstream fout("secv5.out");
fread(buf, DIM, 1, fin);
readUnsigned(n);
readUnsigned(L);
readUnsigned(U);
for (int i = 0; i < n; i++)
readUnsigned(values[i]);
long long rez = compute(U) - compute(L-1);
fout << rez;
return 0;
}