Cod sursa(job #2081220)

Utilizator ptudortudor P ptudor Data 4 decembrie 2017 13:47:52
Problema Secventa 5 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.7 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
int n,l,u,st;
int a[1048577];
int dis=0;
queue <int> rep;
struct per
{
    int prim,doi;
};
const int P=123457;
vector <per> h[P];
int adaug (int x)
{
    int r=x%P;
    int i;
    int len=h[r].size();
    for (i=0;i<len;i++)
    {
        if (h[r][i].prim==x)
        {
            h[r][i].doi++;
            return 0;
        }
    }
    per aux;
    aux.prim=x;
    aux.doi=1;
    h[r].push_back(aux);
    return 1;
}
int sterg(int x)
{
int r=x%P;
int len=h[r].size();
int i;
for (i=0;i<len;i++)
    {
    if (h[r][i].prim==x)
    {
        if (h[r][i].doi>=2)
        {
            h[r][i].doi--;
            return 0;
        }
        else
        {
            h[r][i]=h[r][len-1];
            h[r].pop_back();
            return 1;
        }
    }
    }
    return 0;
}
int main()
{
    ifstream in("secv5.in");
    ofstream out("secv5.out");
    in>>n>>l>>u;
    int i;
    int p=0;
    int cs;
    st=1;dis=0;
    int aux;
    for (i=1;i<=n;i++)
    {
        in>>a[i];
        if (adaug(a[i])==1)
            dis++;
        while (dis>u)
        {
            cout<<"a";
            if (sterg(a[st])==1)
                {dis--;}
            st++;
        }
        aux=dis;
        cs=st;
        while (aux>=l)
        {
         p++;
         if (sterg(a[cs])==1)
         {
             aux--;

         }

         rep.push(a[cs]);
         cs++;
        }
        while (!rep.empty())
        {
            adaug(rep.front());
            rep.pop();
        }
    }
    out<<p;
    out.close();
    in.close();
    return 0;
}