Cod sursa(job #1703604)

Utilizator sucureiSucureiRobert sucurei Data 17 mai 2016 11:11:15
Problema Operatii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <vector>
#include <cstdio>

using namespace std;

const int Size=(1<<16);

vector<int> v[100006];

int i,j, x,n, ans, pi,ps, poz=0;
long long Ans;
bool ap[1000006];
char Buffer[Size+4];

bool cifra(char c)
{
    return (c>='0' && c<='9');
}

int GetInt()
{
    while(!cifra(Buffer[poz]))
    {
        ++poz;
        if(poz==Size) poz=0, fread(Buffer, 1, Size, stdin);
    }
    int nr=0;

    while(cifra(Buffer[poz]))
    {
        nr=nr*10+Buffer[poz]-'0';
        ++poz;
        if(poz==Size) poz=0, fread(Buffer, 1, Size, stdin);
    }
    return nr;
}

int main()
{
    freopen("operatii.in", "r", stdin);
    freopen("operatii.out", "w", stdout);

    fread(Buffer, 1, Size, stdin);
    poz=0;
    n=GetInt();

    for(i=1; i<=n; ++i)
    {
        v[GetInt()].push_back(i);
        ap[i]=1;
    }

    ans=1;
    Ans=0;

    for(i=0; i<=100000; ++i)
    {
        for(j=0; j<v[i].size(); ++j)
        {
            pi=v[i][j];

            while(j+1<v[i].size() && v[i][j]+1==v[i][j+1])
            {
                ap[v[i][j]]=0;
                ++j;
            }

            ps=v[i][j];
            ap[ps]=0;

            if(!ap[pi-1] && !ap[ps+1]) --ans;
            else if(ap[pi-1] && ap[ps+1]) ++ans;
        }
        Ans+=ans;
    }

    printf("%lld\n", Ans);

    return 0;
}