Cod sursa(job #2490271)

Utilizator serbanmihaiserban ionescu mihai serbanmihai Data 9 noiembrie 2019 23:27:01
Problema Secventa 5 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.3 kb
#include <fstream>
#include<iostream>
#define mod 666013
#include<deque>
FILE*f;
FILE*g;
using namespace std;
int n,l,u,i,j,k,asd,alf,v[1050000],rasp,ador;
deque<pair<int,int> >deque1[1050000];
bool adaugare(int x)
{
    int index=x%mod;int alf=0;
    for(int i=1;i<=deque1[index].size();i++)
    {
        if(deque1[index].front().first==x)
        {deque1[index].front().second++;alf++;break;}
        deque1[index].push_back(deque1[index].front());
        deque1[index].pop_front();
    }
    if(alf==0)
        deque1[index].push_front(make_pair(x,1));
        return alf;
}
void stergere(int x)
{alf=0;
    int index=x%mod;
    deque<pair<int,int> >::iterator i2;
    for(i2=deque1[index].begin();i2!=deque1[index].end();++i2)
    {
        if(x==i2->first)
        {
            if(i2->second==1)
                {alf=1;deque1[index].erase(i2);}
                else
                    deque1[index].front().second--;
            break;
        }
    }
}
bool verificare(int x)
{int adev=0;
    int index=x%mod;
    //int rata=deque1[index].front().first;
    deque<pair<int,int> >::iterator i;
    for(i=deque1[index].begin();i<=deque1[index].end();++i)
    {
        if(i->first==x)
        {
            adev=1;break;
        }
    }
    if(adev)
        return 1;
}
int raspuns(int u)
{
    int i=1;
    int j=1;
    int dif=1;
    int rasp=1;
    deque1[v[1]%mod].push_front(make_pair(v[1],1));
    while(j<n)
    {int toate=0;
        if(j!=n&&verificare(v[j+1]))
            toate=1;
        if(dif<u||toate)
        {j++;
            if(!adaugare(v[j]))
                dif++;
                rasp+=j-i+1;
        }
        else
            if(j!=n)
        {
            stergere(v[i]);
            if(alf==1)
            dif--;
        i++;
        }
    }
    return rasp;
}
int main()
{f=fopen("secv5.in","r");
g=fopen("secv5.out","w");
fscanf(f,"%d%d%d",&n,&l,&u);
for(int i=1;i<=n;i++)
    fscanf(f,"%d",&v[i]);
    int alpha=deque1[7].front().first;
    int asas=raspuns(u);
    for(int i=1;i<=n;i++)
        {
            while(!deque1[v[i]%mod].empty())
            deque1[v[i]%mod].pop_front();
        }
        //int alpha=deque1[7].front().first;
    int asas1=raspuns(l-1);
    fprintf(g,"%d",asas-asas1);

    return 0;
}