Pagini recente » Cod sursa (job #2935385) | Cod sursa (job #1881920) | Cod sursa (job #211705) | Cod sursa (job #1759729) | Cod sursa (job #3226320)
/**
/// VARIANTA 1
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
const int NMAX = (1 << 20) + 1;
struct Element {
unsigned val;
int poz;
};
Element v[NMAX];
int w[NMAX], F[NMAX];
int N;
ifstream f ("secv5.in");
ofstream g ("secv5.out");
bool comp (const Element &a, const Element &b) {
return a.val < b.val;
}
void normalizare() {
sort (v+1, v+N+1, comp);
int x = 1;
w[v[1].poz] = 1;
for (int i=2; i<=N; i++) {
if (v[i].val != v[i-1].val)
x++;
w[v[i].poz] = x;
}
}
long long calcul(int dif) {
long long nrSec = 0;
int nrDif = 0, p =1;
for (int i=1; i<=N; i++)
F[i] = 0;
for (int i=1; i<=N; i++) {
if (++F[w[i]] == 1)
++nrDif;
while (nrDif > dif && p<=i) {
if (--F[w[p]] == 0)
--nrDif;
++p;
}
nrSec += i-p+1;
}
return nrSec;
}
int main()
{
int L, U;
f >> N >> L >> U;
for (int i=1;i<=N; i++) {
f >> v[i].val;
v[i].poz = i;
}
normalizare();
g << calcul(U) - calcul(L-1);
return 0;
}
*/
/// VARIANAT 2
#include <iostream>
#include <fstream>
#include <unordered_map>
using namespace std;
const int NMAX = (1 << 20) + 1;
int N;
unsigned v[NMAX+1];
ifstream f ("secv5.in");
ofstream g ("secv5.out");
long long calcul(int dif) {
unordered_map<unsigned, int> M;
long long nrSec = 0;
int p = 1, nrDif = 0;
for (int i=1; i<=N; i++) {
if (++M[v[i]] == 1)
nrDif++;
while(nrDif > dif && p<=i) {
if (--M[v[p]]==0)
nrDif--;
p++;
}
nrSec += i-p+1;
}
return nrSec;
}
int main()
{
int L, U;
f >> N >> L >> U;
for (int i=1;i<=N; i++)
f >> v[i];
g << calcul(U) - calcul(L-1);
return 0;
}