Pagini recente » Cod sursa (job #1127063) | Cod sursa (job #844349) | Cod sursa (job #1127083) | Cod sursa (job #878294) | Cod sursa (job #3305451)
#include <fstream>
#include <map>
using namespace std;
#define int long long
ifstream fin("secv5.in");
ofstream fout("secv5.out");
int n, l, u;
int v[1050005];
int numara(int k)
{
//il folosim exact ca pe un vector de frecventa normal
//doar ca ocupa mult mai putina memorie
map<long long, int> fr; //operatiile tin O(log) timp
int s = 1;
int d = 0;
int nrelem = 0;
int cnt = 0; //numarul de subsecvente cu <= k elemente distincte
while (d<n){
while (nrelem!=k && d<n){
d++;
fr[v[d]]++;
if (fr[v[d]]==1){
nrelem++;
}
}
cnt+=(d - s + 1);
fr[v[s]]--;
if (fr[v[s]]==0){
nrelem--;
}
s++;
}
while(s <= n)
{
cnt += (d - s + 1);
s++;
}
return cnt;
}
signed main()
{
fin>>n>>l>>u;
for(int i = 1; i<=n; i++)
{
fin>>v[i];
}
fout<<numara(u) - numara(l - 1); //adica fix cate subsecvente au intre l si u numere distincte
return 0;
}