Cod sursa(job #644635)

Utilizator valentin.harsanValentin Harsan valentin.harsan Data 7 decembrie 2011 11:09:38
Problema Secventa 5 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<fstream>
#include<vector>
using namespace std;

ifstream in("secv5.in");
ofstream out("secv5.out");

unsigned int n,l,u,x[1000010],nr,nrdif;
vector<unsigned int> v[666015];

inline unsigned int h(unsigned int q) {
    return q%666014;
}

inline void add(unsigned int nr) {
    if(v[h(nr)].empty())
        ++nrdif;

    v[h(nr)].push_back(nr);
}
inline void del(unsigned int nr) {
    int i;

    for(i=0 ; i<v[h(nr)].size();++i)
        if(v[h(nr)][i]==nr)
            v[h(nr)].erase(v[h(nr)].begin() + i);

    if(v[h(nr)].empty())
        --nrdif;
}

int main() {
    unsigned int i,j;

    in >> n >> l >> u;

    for(i=1;i<=n;++i)
        in >> x[i];

    add(x[1]);
    j=1;

    for(i=1;i<=n;++i) {

        while(nrdif>=l) {
            del(x[j]);
            --j;
        }

        ++j;

        while(nrdif<=u && j<=n) {
            add(x[j]);
            ++j;
            if(nrdif>=l)
                ++nr;
        }

        --j;

        del(x[i]);

    }

    out << nr << "\n";

    return 0;
}