Pagini recente » Cod sursa (job #2670330) | Cod sursa (job #1911021) | Cod sursa (job #2766795) | Cod sursa (job #2274227) | Cod sursa (job #9610)
Cod sursa(job #9610)
#include <stdio.h>
#include <map>
using namespace std;
#define MN (1024)
int N, n[MN], X, Left, Right;
map<int, int> c[MN];
inline void add(map<int, int> &m, int x)
{
if(m.find(x) != m.end()) {
int tmp = m[x]+1;
m[x] = tmp;
} else m[x] = 1;
}
inline void sub(map<int, int> &m, int x)
{
if(m.find(x) != m.end()) {
int tmp = m[x];
if(tmp > 1)
m[x] = tmp-1;
else m.erase(x);
}
}
int main()
{
freopen("secv5.in", "r", stdin);
freopen("secv5.out", "w", stdout);
int i, j, tmp;
scanf("%d %d %d", &N, &Left, &Right);
for(i = 0; i < N; ++ i)
scanf("%d", &n[i]);
c[0][n[0]] = 1;
if(Left <= 1 && 1 <= Right)
++ X;
//map<int, int>::iterator mapi, mapj;
for(i = 1; i < N; ++ i) {
c[i] = c[i-1];
add(c[i], n[i]);
/*
for(map<int, int>::iterator it = c[i].begin(); it != c[i].end(); ++ it)
printf("%d %d\n", (*it).first, (*it).second);
printf("size = %d\n", c[i].size());
*/
tmp = c[i].size();
if(Left <= tmp && tmp <= Right)
++ X;
}
for(i = 0; i < N-1; ++ i) for(j = i+1; j < N; ++ j) {
sub(c[j], n[i]);
tmp = c[j].size();
if(Left <= tmp && tmp <= Right)
++ X;
}
printf("%d\n", X);
return 0;
}