Cod sursa(job #1048185)

Utilizator BarracudaFMI-Alex Dobrin Barracuda Data 5 decembrie 2013 15:09:47
Problema Secventa 5 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<fstream>
#include<cstring>
#include<vector>
#include<algorithm>
#define dim 1<<20
 
using namespace std;
 
ifstream f("secv5.in");
ofstream g("secv5.out");
 
vector < pair < unsigned int ,unsigned  int > >s;
unsigned int normalizare,i,j,n,u,l,v[dim],fr[dim];
 
long long  sub(int X) {
    unsigned long long ans=0;
    memset(fr,0,sizeof(fr));
    unsigned int i=0;unsigned int j=0;
    unsigned int nr=0;
    for(;j<n;++j) {
         
        if(fr[v[j]]==0)
            ++nr;
        ++fr[v[j]];
         
        while(nr>X) {
            --fr[v[i]];
            if(!fr[v[i]])
                --nr;
            ++i;
        }
         
        ans+=j-i+1;
    }
    return ans;
}
 
int main () {
    f>>n>>l>>u;
    unsigned int  x;
    for(i=0;i<n;++i){
        f>>x;
        s.push_back(make_pair(x,i));
    }
     
    sort(s.begin(),s.end());
    normalizare=0;
    i=0;
    v[s[i++].second]=normalizare;
    for(;i<n;i++) {
         
        if(s[i-1].first!=s[i].first){
            ++normalizare;
            v[s[i].second]=normalizare;
        }
        else
            v[s[i].second]=normalizare;
         
    }
    g<<sub(u)-sub(l-1);
    return 0;
     
}