Cod sursa(job #851999)

Utilizator BarracudaFMI-Alex Dobrin Barracuda Data 10 ianuarie 2013 18:42:52
Problema Secventa 5 Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 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 ,int > >s;
int normalizare,i,j,n,u,l,v[dim],fr[dim];

long long  sub(int X) {
	long long ans=0;
	memset(fr,0,sizeof(fr));
	int i=0;j=0;
	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;
	int x;
	for(i=0;i<n;++i){
		f>>x;
		s.push_back(make_pair(x,i));
	}
	
	sort(s.begin(),s.end());
	normalizare=0;
	for(i=0;i<n;) {
		
		if(i && s[i-1].first!=s[i].first){
			++normalizare;
		}
		v[s[i++].second]=normalizare;
	}
	g<<sub(u)-sub(l-1);
	return 0;
	
}