Cod sursa(job #253827)

Utilizator katakunaCazacu Alexandru katakuna Data 6 februarie 2009 12:41:51
Problema Caramizi Scor 80
Compilator cpp Status done
Runda Stelele Informaticii 2009, clasele 9-10, ziua 1 Marime 1.12 kb
#include<stdio.h>
#define NMAX 200011
#include<algorithm>
using namespace std;

int y,cmax,m,lmax,n,c[NMAX],l[NMAX],i;
int viz[1000011],b[1000111];
long long x,S,s[1000011],d[1000011];

long long car(int X){
long long rez=0;

//   if()

   rez=s[X];
   rez+=(long long)((long long)n - (long long)b[X]) * X;

rez/=X;
rez*=X;
return rez;
}

int main(){

   FILE *f=fopen("caramizi.in","r");
   FILE *g=fopen("caramizi.out","w");

   fscanf(f,"%d %d",&n,&m);
   for(i=1;i<=n;i++){
      fscanf(f,"%d",&y);
      viz[y]++;
      S+=y;

      if(y > cmax)
      cmax = y;
      
   }

   for(i=1;i<=m;i++){
      fscanf(f,"%d",&l[i]);
      if(l[i] > lmax)
      lmax = l[i];
   }

   int q=max(cmax, lmax);
   
   for(i=1; i<=q; i++){
      b[i] = b[i-1] + viz[i-1];
      s[i] = s[i-1] + (long long)viz[i-1]*(long long)((long long)i-(long long)1);
   }


   d[1]=n;

   for(i=2; i<=lmax; i++){
      d[i]=d[i-1];
      x=car(i);
      if(d[i] < x)
         d[i] = x;
   }


   for(i=1; i<=m; i++)
      fprintf(g,"%lld\n",d[l[i]]);

   fclose(f);
   fclose(g);
   return 0;
}