Cod sursa(job #972575)

Utilizator scipianusFMI Ciprian Olariu scipianus Data 12 iulie 2013 10:34:24
Problema Divk Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include<fstream>
#include<vector>
using namespace std;
int n,K,A,B,v[500100],sum[500100],size[100100],ind[100100];
vector <int> poz[100100];

inline long long Count(int L)
{
	int i,r;
	long long rez=0LL;
	poz[0].push_back(0);
	ind[0]=0;
	size[0]=1;
	for(i=1;i<=n;i++)
	{
		r=sum[i];
		while(ind[r]<size[r] && i-poz[r][ind[r]]>L)
			ind[r]++;
		rez+=1LL*(size[r]-ind[r]);
		poz[r].push_back(i);
		size[r]++;
	}
	for(i=0;i<K;i++)
	{
		poz[i].clear();
		size[i]=0;
		ind[i]=0;
	}
	return rez;
}

int main()
{
	int i;
	ifstream fin("divk.in");
	fin>>n>>K>>A>>B;
	for(i=1;i<=n;i++)
	{
		fin>>v[i];
		sum[i]=(sum[i-1]+v[i])%K;
	}
	fin.close();
	
	ofstream fout("divk.out");
	fout<<(Count(B)-Count(A-1))<<"\n";
	fout.close();
	return 0;
}