Cod sursa(job #1174099)

Utilizator alevasluialeHuhurez Marius alevasluiale Data 21 aprilie 2014 23:40:12
Problema Secventa 5 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <fstream>
#include <vector>
#define mod 666013
#include <bitset>
using namespace std;
bitset <((1<<17)+10)> p;
struct norme
{
    int r,y;
} v[(1<<19)+5];
int n,l,u,i,k,j,tot=1;
vector <norme> x[mod];
vector <norme>::iterator it;
inline void adauga(norme rachi)
{
    x[rachi.r%mod].push_back(rachi);
}
inline int cauta(int k)
{
    int zum=k%mod;
    for(it=x[zum].begin();it!=x[zum].end();it++)
    {
        if(it->r==k) return it->y;
    }
    return 0;
}
inline int secv(int x)
{
    int nr=1,sol=1,last=0,k;
    p[v[0].y]=1;
    for(i=1;i<n;i++)
    {
        if(p[v[i].y]==0) nr++,p[v[i].y]=1;
        if(nr>x)
        {
            p[v[last].y]=0;
            nr--;
            k=last;
            while(v[last].y==v[k].y)
            {
                last++;
            }
        }
        sol+=i+1-last-1+1;
    }
    for(i=0;i<n;i++) p[v[i].y]=0;
    return sol;
}
ifstream fin("secv5.in");
ofstream fout("secv5.out");
int main()
{

        fin>>n>>l>>u;
        for(i=0;i<n;i++)
        {
            fin>>k;
            v[i].r=k;
            v[i].y=cauta(k);
            if(v[i].y==0) v[i].y=tot,tot++;
            adauga(v[i]);
        }
        fout<<secv(u)-secv(l-1);
}