Pagini recente » Soldati | jc2012-runda1 | Clasament simulare_cerc_hatz | Cod sursa (job #3286775) | Cod sursa (job #1567125)
#include <iostream>
#include <fstream>
#include <vector>
#include <unordered_map>
using namespace std;
#define trace(x) cerr << #x << ": " << x << '\n'
#define trace2(x, y) cerr << #x << ": " << x << " " << #y << ": " << y << '\n'
int solve(vector<unsigned> values, int limit)
{
int answer = 0;
unordered_map<unsigned int, int> myHash;
for(size_t left=1, right=1 ; right<values.size() ; ++right)
{
// trace2(left, right);
++myHash[values[right]];
// trace(myHash.size());
while(myHash.size() > static_cast<size_t>(limit))
{
if(--myHash[values[left]] == 0)
myHash.erase(values[left]);
++left;
}
answer += right-left+1;
}
// trace(answer);
return answer;
}
int main()
{
ifstream in("secv5.in");
ofstream out("secv5.out");
int num, left, right;
in >> num >> left >> right;
vector<unsigned int> values(num+1);
for(int i=1 ; i<=num ; ++i)
in >> values[i];
out << solve(values, right) - solve(values, left-1) << '\n';
in.close();
out.close();
return 0;
}