Cod sursa(job #1559608)

Utilizator misinozzz zzz misino Data 31 decembrie 2015 11:51:28
Problema Secventa 5 Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul I Marime 0.93 kb
#include<fstream>
#include<algorithm>
#include<cstring>
#define mp make_pair
#define N (1<<20)+20
using namespace std;
ifstream f("secv5.in");
ofstream g("secv5.out");
unsigned int i,n,p,l,u,x,nr[N],v[N];
pair<unsigned int,int>a[N];
inline long long rez(int x)
{
    memset(nr,0,sizeof(nr));
    int j=1,s=0;
    long long sol=0;
    for(i=1;i<=n;++i)
    {
        if(!nr[v[i]])
        ++s;
        ++nr[v[i]];
        while(s>x)
        {
            --nr[v[j]];
            if(!nr[v[j]])
            --s;
            ++j;
        }
        sol+=(long long)(i-j+1);
    }
    return sol;
}
int main()
{
    f>>n>>l>>u;
    for(i=1;i<=n;++i)
    {
        f>>x;
        a[i]=mp(x,i);
    }
    sort(a+1,a+n+1);
    v[a[1].second]=1;
    p=1;
    for(i=2;i<=n;++i)
    if(a[i-1].first==a[i].first)
    v[a[i].second]=p;
    else
    v[a[i].second]=++p;
    g<<rez(u)-rez(l-1)<<'\n';
    return 0;
}