Pagini recente » Cod sursa (job #960776) | Cod sursa (job #2180099) | Cod sursa (job #2031961) | Cod sursa (job #869611) | Cod sursa (job #2608880)
#include <fstream>
#include <cstdio>
#include <unordered_map>
using namespace std;
const int MAXN = 1050000;
unsigned int n, L, U;
unsigned int values[MAXN];
FILE *fin = fopen("secv5.in", "r");
int cursor = 0;
const int DIM = (1<<21);
char buf[DIM];
void adv()
{
if (__builtin_expect(++cursor == DIM, 0)) {
cursor = 0;
fread(buf, DIM, 1, fin);
}
}
void readUnsigned(unsigned int &nr)
{
for (; buf[cursor] < '0'; 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) {
auto it = m.find(values[st]);
if (--(it->second) == 0)
m.erase(it);
++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 (unsigned int i = 0; i < n; i++)
readUnsigned(values[i]);
long long rez = compute(U) - compute(L-1);
fout << rez;
return 0;
}