Cod sursa(job #9703)

Utilizator alextheroTandrau Alexandru alexthero Data 27 ianuarie 2007 16:44:37
Problema Secventa 5 Scor 0
Compilator cpp Status done
Runda Unirea 2007, clasele 11-12 Marime 1.02 kb
#include <cstdio>
#include <algorithm>

#define nmax 50007

using namespace std;

int place[nmax],x[nmax],used[nmax],n,u,l,x1[nmax];

int cmp(int i,int j) {
    return x[i] < x[j];
}

int main() {
    freopen("secv5.in","r",stdin);
    freopen("secv5.out","w",stdout);
    
    scanf("%d %d %d\n",&n,&u,&l);
    for(int i = 1;i <= n; i++) scanf("%d",&x[i]);
    
    for(int i = 1;i <= n; i++) place[i] = i;
    sort(place + 1,place + n + 1,cmp);

    x1[place[1]] = 1;
    for(int i = 2; i <= n; i++) 
        if(x[place[i]] == x[place[i-1]]) x1[place[i]] = x1[place[i-1]];
        else x1[place[i]] = x1[place[i-1]] + 1;

    int tot = 0;
    for(int i = 1; i <= n; i++) {
        int cate = 0;
        for(int j = i; j <= n; j++) {
            if(!used[x1[j]]) {
                used[x1[j]] = 1;
                cate++;
            }
            if(cate >= u && cate <= l) tot++;
        }
        for(int j = i; j <= n; j++)
            used[x1[j]] = 0;
    }
    printf("%d\n",tot);
    return 0;
}