Pagini recente » Cod sursa (job #1374667) | Cod sursa (job #147008) | Cod sursa (job #202576) | Rating alexandra paveliu (_alexandra66_) | Cod sursa (job #1409726)
#include <fstream>
#include <cstring>
#include <vector>
#define MOD 666013
using namespace std;
ifstream fin ("secv5.in");
ofstream fout ("secv5.out");
unsigned int N, L, U, nr, V[(1 << 20) + 16];
vector < pair < unsigned int, unsigned int > > H[MOD + 16];
int fr[(1 << 20) + 16];
void Read_Data();
int Find_H(int, unsigned int);
void Insert_H(int);
long long Solve(int);
void Write_Data();
int main()
{
Read_Data();
Write_Data();
return 0;
}
void Write_Data()
{
fout << Solve(U) - Solve(L - 1) << '\n';
fout.close();
}
long long Solve(int dim)
{
memset(fr, 0, sizeof(fr));
int num = 0, st = 1;
long long sol = 0;
for (int i = 1; i <= N; i++)
{
int x = Find_H(V[i] % MOD, V[i]);
if (!fr[x])
{
fr[x] = 1;
if (num == dim)
{
x = Find_H(V[st] % MOD, V[st]);
while (fr[x])
{
x = Find_H(V[st] % MOD, V[st]);
fr[x]--;
st++;
}
}
else num++;
}
else
{
fr[x] += 1;
}
sol += (i - st + 1);
}
return sol;
}
int Find_H(int poz, unsigned int val)
{
for (int i = 0; i < H[poz].size(); i++) {
if (H[poz][i].first == val) return H[poz][i].second;
}
return 0;
}
void Insert_H(unsigned int x)
{
int poz = x % MOD;
if (!Find_H(poz, x)) {
H[poz].push_back( { x, ++nr } );
}
}
void Read_Data()
{
fin >> N >> L >> U;
for (int i = 1; i <= N; i++) {
fin >> V[i];
Insert_H(V[i]);
}
}