Cod sursa(job #254085)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 6 februarie 2009 18:44:05
Problema Caramizi Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

int n,m,num;
long long sir[200100];
long long pre[200100];
long long rez;
long long S;

int maxi(int a,int b)
{
   return a>b?a:b;
}

int main ()
{
     freopen ("caramizi.in","r",stdin);
     freopen ("caramizi.out","w",stdout);
     scanf ("%d %d",&n,&m);
     for (int i=1;i<=n;i++)
          scanf ("%lld ",&sir[i]);

     sort(sir+1,sir+n);

     int poz=0;

     for (long long i=1;i<=200001;i++)
     {
          while (sir[poz]<i)
          {
               S+=sir[poz];
               poz++;
               if (sir[poz]==0)
                    break;
          }
          int x=0;
          if (sir[poz]!=0)
               x=(n-poz+1)*i;
          int lol=S/i;
          x+=i*lol;
          pre[i]=maxi(pre[i],x);
          pre[i]=maxi(pre[i],pre[i-1]);
     }

     for (int i=0;i<m;i++)
     {
          scanf ("%d ",&num);
          if (num>200010)
               num=200010;
          while (!pre[num])
               num--;
          printf("%ld\n",pre[num]);
     }
     return 0;
}