Hey guys I just tried the Anton and Making Potions problem , hope you might like my solution feel free to comment better solution .
#include
#define N 200000
struct type2 {
int c, d;
} yy[N];
int binsearch(struct type2 *yy, int x, int k) {
int l = -1, r = k;
while (r – l > 1) {
int m = (l + r) / 2;
if (yy[m].d > x)
r = m;
else
l = m;
}
return l;
}
int main() {
int i, n, m, k, x, s;
long long min;
static int aa[N], bb[N];
scanf(“%d%d%d%d%d”, &n, &m, &k, &x, &s);
for (i = 0; i < m; i++)
scanf("%d", &aa[i]);
for (i = 0; i < m; i++)
scanf("%d", &bb[i]);
for (i = 0; i < k; i++)
scanf("%d", &yy[i].c);
for (i = 0; i < k; i++)
scanf("%d", &yy[i].d);
for (i = 0; i < k; i++)
if (yy[i].d > s)
break;
i–;
if (i >= 0)
min = (long long) (n – yy[i].c) * x;
else
min = (long long) n * x;
for (i = 0; i < m; i++) {
int j;
if (bb[i] > s)
continue;
j = binsearch(yy, s – bb[i], k);
if (j >= 0) {
long long t = (long long) aa[i] * (n – yy[j].c);
if (min > t)
min = t;
} else {
long long t = (long long) aa[i] * n;
if (min > t)
min = t;
}
}
printf(“%lld\n”, min);
return 0;
}