Cod sursa(job #266005)

Utilizator GavrilaVladGavrila Vlad GavrilaVlad Data 24 februarie 2009 20:25:08
Problema Caramizi Scor 15
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <stdio.h>
#include <algorithm>

#define maxn 1000010

using namespace std;

long long n, i, j, k, m, t, ma, x;
long long d[maxn], sol[maxn], q[maxn], p[maxn], poz;

inline int cmp(long x, long y)
{
    return q[x]<q[y];
}

int main()
{
    freopen("caramizi.in", "r", stdin);
    freopen("caramizi.out", "w", stdout);
    scanf("%lld%lld", &n, &m);
    for(i=1; i<=n; i++)
    {
        scanf("%lld", &d[i]);
    }
   
    sort(d+1, d+n+1);
     
    for(i=1; i<=m; i++)
    {
        scanf("%lld", &q[i]);
        p[i]=i;
      //  printf("%d\n", p[i]);
    }
    
    sort(p+1, p+m+1, cmp);
    sort(q+1, q+m+1);
    
 /*   for(i=1; i<=m; i++)
    {
        printf("%lld ", q[i]);
        printf("%d\n", p[i]);
    }*/
    t=-1;
    d[0]=1;
    poz=1;
    d[n+1]=maxn;
    for(i=0; i<=n; i++)
    {
        t+=d[i];
        for(j=d[i]; j<d[i+1]; j++)
        {
            x = t-t%j+(n-i)*j;
            if(x>ma)
            {
                ma=x;
            }
            if(j==q[poz])
            {
                sol[p[poz]]=ma;
                poz++;
            }
        }
    }
    for(i=1; i<=m; i++)
    {
        printf("%lld\n", sol[i]);
    }
    return 0;
}