Pagini recente » Cod sursa (job #2360477) | Cod sursa (job #3269273) | Cod sursa (job #99860) | Cod sursa (job #903119) | Cod sursa (job #2862173)
#include <fstream>
#include <algorithm>
#define nmax 200000LL
#define cmax 1000000LL
#define int long long
using namespace std;
const int inf = 1e9;
struct lol
{
int val, poz;
};
bool cmpval ( lol a, lol b )
{
return a.val < b.val;
}
bool cmpinit ( lol a, lol b )
{
return a.poz < b.poz;
}
lol q[nmax + 1];
int v[nmax + 1], vs[nmax + 1], f[cmax + 1], cat[cmax + 1], fst[cmax + 1], catdr[cmax + 1];
// toate frecv sub l(i) trebuie adaugate in mod normal, toate frecv peste l[i] trebuie rotunjite la l(i)
signed main()
{
ifstream cin ( "caramizi.in" );
ofstream cout ( "caramizi.out" );
int i, n, m, maxx = 0, p = 1, caramizi;
cin >> n >> m;
for ( i = 1; i <= n; i++ )
cin >> v[i], f[v[i]] += v[i], cat[v[i]]++;
for (i = 1; i <= cmax; i++)
f[i] += f[i - 1];
for (i = cmax - 1; i >= 1; i--)
cat[i] += cat[i + 1];
for ( i = 1; i <= m; i++ )
cin >> q[i].val, q[i].poz = i;
sort ( q + 1, q + m + 1, cmpval );
for ( i = 1; i <= min (cmax, q[m].val); i++ )
{
caramizi = f[i] + cat[i + 1] * i;
caramizi /= i;
caramizi *= i;
if (caramizi > maxx)
maxx = caramizi;
if ( q[p].val == i )
q[p++].val = maxx;
}
while (p <= m)
q[p++].val = maxx;
sort ( q + 1, q + m + 1, cmpinit );
for ( i = 1; i <= m; i++ )
cout << q[i].val << '\n';
return 0;
}