Pagini recente » Cod sursa (job #1492747) | Cod sursa (job #2596658) | Cod sursa (job #378271) | Cod sursa (job #950796) | Cod sursa (job #2443157)
#include <fstream>
#include <unordered_map>
#define limit 10000
#define ch buffer[position]
#define Next (++position == limit) ? (fin.read(buffer, limit), position = 0) : 0
using namespace std;
const int NMAX = (1 << 20) + 10;
char buffer[limit];
unsigned int n, l, u, position;
unsigned int v[NMAX];
ifstream fin("secv5.in");
ofstream fout("secv5.out");
void Read(unsigned int &x)
{
for (;!('0' <= ch && ch <= '9');Next);
for(x = 0;('0' <= ch && ch <= '9');x = x * 10 + (ch - '0'), Next);
}
long long Solve(const int &k)
{
long long ret = 0;
unordered_map <unsigned int, int> mp;
for (int i = 1, j = 1;j <= n;++j)
{
mp[v[j]]++;
while (mp.size() > k)
{
mp[v[i]]--;
if (mp[v[i]] == 0)
mp.erase(v[i]);
++i;
}
ret = 1LL * ret + j - i + 1;
}
return ret;
}
int main()
{
Read(n);
Read(l);
Read(u);
for (int i = 1;i <= n;++i)
Read(v[i]);
fout << Solve(u) - Solve(l - 1) << "\n";
fin.close();
fout.close();
return 0;
}