Cod sursa(job #498089)

Utilizator ProcopliucProcopliuc Adrian Procopliuc Data 3 noiembrie 2010 23:45:13
Problema Divk Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
# include <fstream.h>
ifstream f ("divk.in");
ofstream g ("divk.out");
long long int i,j,n,k,la,lb,s[500100],x,y;



  struct nod 
  {
	  int info;
	  nod *urm;
  }*a[100010],*p,*q;
  
   void adauga (long long int x,long long int i)
   {
	   p=new nod;
	   p->info=x;
	   p->urm=a[i];
	   a[i]=p;
   }
	 
   long long int calc (nod *p,long long int lim)
  {
    long long int k=0,i=1,j=1,x,y;
     q=p;
	 while (q->urm)
	 {
		if (q->urm->info-p->info<=lim)
		{	
			q=q->urm;
			j++;
		}
		else
		{
			k=k+(j-i);
			p=p->urm;
			i++;
		
		}
	 }
				 
				 
	
			  
	 ;
	 if (j-i>0)
	 {
		 y=j-i;
		 x=(y*(y+1))/2;
		 k=k+x;
	 }
	 return k;
                				

	 
     
  }	 

   
   long long int asd (long long int lim)
   {
	   long long int nr=0;
	   for (i=0;i<k;i++)
		   if (a[i])
		   nr=nr+calc(a[i],lim);
	   return nr;
   }
		   

 

int main ()
{
	f>>n>>k>>la>>lb;
	for (i=1;i<=n;i++)
	{
		f>>x;
		s[i]=s[i-1]+x;
	}
	
	for (i=n;i>=1;i--)
		adauga (i,s[i]%k);
	p=new nod;
	p->info=0;
	p->urm=a[0];
	a[0]=p;
	
	x=asd (lb);
	y=asd (la-1);
	g<<x-y;
	
	return 0;
}