Cod sursa(job #498077)

Utilizator ProcopliucProcopliuc Adrian Procopliuc Data 3 noiembrie 2010 22:25:59
Problema Divk Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 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;
   }
	 
    int calc (nod *p,long long int lim)
  {
    long long int k=0,i=1,j=2,x,y;
     q=p->urm;
	 while (q)
	 {
		 if (q->info-p->info<=lim)
		 {
			k++;
			q=q->urm;
			j++;
		 }
         else
         {
			 p=p->urm;
			 i++;
			 if (q->info-p->info<=lim)
		 		k=k+(j-i)-1;
		 }
	 }
	 
	 if (j-i-2>0)
	 {
		 y=j-i-1;
		 x=(y*(y-1))/2;
		 k=k+x;
	 }
	 return k;
                				

	 
     
  }	 

   
   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;
}