Cod sursa(job #667413)

Utilizator Smaug-Andrei C. Smaug- Data 23 ianuarie 2012 00:32:38
Problema Secventa 5 Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <cstdio>
#include <vector>
using namespace std;

#define MAXN ((1<<20)+10)
#define MOD 80011

vector<unsigned> H[MOD];

void hash_add(unsigned x){
  int key;
 
  key=x%MOD;
  H[key].push_back(x);

}

int hash_find(unsigned x){
  int key;
  vector<unsigned>::iterator ii;

  key=x%MOD;
  for(ii=H[key].begin(); ii!=H[key].end(); ii++)
    if(*ii == x)
      return 1;
  
  return 0;

}

void hash_remove(unsigned x){
  int key;

  key=x%MOD;
  H[key].clear();

}

int main(){

  freopen("secv5.in", "r", stdin);
  freopen("secv5.out", "w", stdout);

  int N, L, R, i, j, cnt, res;
  static unsigned A[MAXN];

  scanf("%d%d%d", &N, &L, &R);
  for(i=0; i<N; i++)
    scanf("%u", A+i);

  res=0;
  for(i=0; i<N; i++){
    cnt=1; hash_add(A[i]);
    for(j=i+1; j<N; j++){
      if(!hash_find(A[j])){
	cnt++;
	hash_add(A[j]);
      }
      
      if(L <= cnt && cnt <= R)
	res++;
      
    }
    for(j=i+1; j<N; j++)
      hash_remove(A[j]);
  }

  printf("%d\n", res);

  return 0;

}