题意:你需要生产n个药剂,现在你有两种操作,一种是将生产一瓶药剂的时间
思路:比较显然的是如果不考虑第一种操作,只考虑第二种操作,因为
#include <cstdio>
#include <string>
#include<iostream>
#include<vector>
#include <stack>
#include <queue>
#include <map>
#include <cstdlib>
#include<string.h>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
typedef pair<int, int>pii;
typedef pair<ll, ll> pll;
typedef pair<int, ll> pil;
const int MAXN = 300000 + 10;
ll a[MAXN], b[MAXN], c[MAXN], d[MAXN];
int main()
{
ll n, m, k, x, s;
scanf("%I64d%I64d%I64d%I64d%I64d", &n, &m, &k, &x, &s);
a[0] = x; b[0] = 0; c[0] = 0; d[0] = 0;
for (int i = 1; i <= m; i++)scanf("%I64d", a + i);
for (int i = 1; i <= m; i++)scanf("%I64d", b + i);
for (int i = 1; i <= k; i++)scanf("%I64d", c + i);
for (int i = 1; i <= k; i++)scanf("%I64d", d + i);
ll ans = n*x;
for (int i = 0; i <= m; i++)
{
if (s >= b[i])
{
ll flag = s - b[i];
ll left = 0, right = k;
while (left < right)
{
ll mid = (left + right) / 2;
if (d[mid] <= flag)
{
if (d[mid + 1]>flag){ left = mid; break; }
else left = mid + 1;
}
else right = mid;
}
ans = min(ans, a[i] * (n - c[left]));
}
}
printf("%I64d\n", ans);
}