Pagini recente » Cod sursa (job #3196925) | Cod sursa (job #1055987) | Cod sursa (job #2477644) | Cod sursa (job #2535167) | Cod sursa (job #2038974)
#include <fstream>
#include <unordered_map>
using namespace std;
ifstream fin("secv5.in");
ofstream fout("secv5.out");
const int NMAX = 1024 * 1024 + 5;
unsigned int n, l, u, vec[NMAX];
void read() {
fin >> n >> l >> u;
for (int i = 1; i <= n; ++ i)
fin >> vec[i];
}
long long cntSecv(int k) {
// cate secvente au cel mult k valori distincte
unordered_map<unsigned int, int> M;
long long cnt = 0;
int idx = 1;
for (int i = 1; i <= n; ++ i) {
++ M[vec[i]];
while ((int)M.size() > k) {
int temp = vec[idx ++];
-- M[temp];
if (!M[temp])
M.erase(temp);
}
cnt += (i - idx + 1); // adaug cele i - idx + 1 secvente care se termina cu vec[i]
}
return cnt;
}
int main() {
read();
fin.close();
fout << cntSecv(u) - cntSecv(l - 1) << "\n";
fout.close();
return 0;
}