Cod sursa(job #799084)

Utilizator adascaluAlexandru Dascalu adascalu Data 17 octombrie 2012 21:37:51
Problema Divk Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
using namespace std;
#include<vector>
#include<fstream>
#define nmax 500001
vector<int>v(nmax),aib(nmax);
int n;
int zeros(int x)
{
	return x&(-x);
}
void update(int x,int i)
{
	while(i<=n)
	{
		aib[i]+=x;
		i+=zeros(i);
	}
}
int suma(int a)
{
	long long s=0;
	while(a)
	{
		s+=aib[a];
		a-=zeros(a);
	}
	return s;
}
int main ()
{
	int x,i,a,b,k,nr=0;
	ifstream f("divk.in");
	ofstream g("divk.out");
	f>>n>>k>>a>>b;
	for(i=1;i<=n;i++)
	{
		f>>x;
		update(x,i);
	}
	for(i=1;i<=n-a+1;i++)
	{
		x=a-1;
		while(x+i-1<n&&x-i+1<b)
		{
			if((suma(x+i)-suma(i-1))%k==0)
				++nr;
			x++;
		}
	}
	g<<nr;
	f.close();
	g.close();
	return 0;
}