Pagini recente » Cod sursa (job #3171266) | Cod sursa (job #1316867) | Cod sursa (job #1732334) | Cod sursa (job #1813770) | Cod sursa (job #1051743)
#include <fstream>
#include <map>
using namespace std;
ifstream in("secv5.in");
ofstream out("secv5.out");
const int NMAX = (1<<20) + 1;
const int HASHKEY = 1666013;
map<unsigned int, int> Hash;
unsigned int V[NMAX], N, U, L;
bool addToHash(unsigned int value){
Hash[value]++;
if(Hash[value] > 1){
return false;
}
return true; //new element
}
bool eraseFromHash(unsigned int value){
Hash[value]--;
if(Hash[value] > 0){
return false;
}
return true;//element does not exist in the hash from now
}
long long resolve(unsigned int maxCounter){
unsigned int i, distinctElements = 0;
long long sol=0;
unsigned int left = 0, right = 0;
Hash.clear();
for(; right < N; right++){
if(addToHash(V[right])){
distinctElements++;
}
while(distinctElements > maxCounter ){
if(eraseFromHash(V[left])){
distinctElements--;
}
left++;
}
if(distinctElements <= maxCounter)
sol += right - left + 1;
}
return sol;
}
int main()
{
in >> N >> U >> L;
for(int i = 0 ; i < N; i++){
in >> V[i];
}
long long Lsol = resolve(L);
long long Usol = resolve(U-1);
out << Lsol - Usol;
return 0;
}