Cod sursa(job #416997)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 13 martie 2010 20:14:29
Problema Caramizi Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <cstdio>
#include <algorithm>
#include <vector>


using namespace std;

#define file_in "caramizi.in"
#define file_out "caramizi.out"

#define Nmax 201010

int n,m,sum,last,cur,poz,inm,ans,sol[Nmax],i,x,maxx;
vector< pair<int,int> > v;

int main()
{
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	
	scanf("%d %d", &n, &m);
	maxx=0;
	for (i=1;i<=n;++i)
	{
		scanf("%d", &x);
		v.push_back(make_pair(x,-1));
	}
	for (i=1;i<=m;++i)
	{
		scanf("%d", &x);
		maxx=max(maxx,x);
		v.push_back(make_pair(x,i));
	}
	for(i=1;i<=maxx;++i) v.push_back(make_pair(i,0)); 
	sort(v.begin(),v.end());
	last=0;
	inm=n;
	ans=0;
	for (i=0;i<v.size();++i)
	{
		poz=v[i].second;
		cur=v[i].first;
		
		if (poz==-1)
		{
			sum+=(cur-last)*inm;
			last=cur;
			inm--;
			ans=max(ans,sum-sum%cur);
		}
		else
		{
			sum+=(cur-last)*inm;
			last=cur;
			ans=max(ans,sum-sum%cur);
			sol[poz]=ans;
		}
	}
	
	
	for (i=1;i<=m;++i)
		 printf("%d\n", sol[i]);
	
	fclose(stdin);
	fclose(stdout);
			
	
	return 0;
	
}