rt,F赛时炸样例了。
# pragma GCC optimize("Ofast,no-stack-protector")
# pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
# include <bits/stdc++.h>
# define I return
# define AK 0
# define IOI ;
using namespace std;
typedef long long ll;
typedef pair <int, int> pii;
int t, n, k, l, r, mid, a[200005], b[200005], c[200005];
ll best;
bool check () {
ll sum = 0;
int s = 0;
for (int i = 1; i <= n; ++ i)
if (a[i] >= mid) {
const int x = (a[i] - mid) / b[i];
if ((s += x) > k)
return 0;
c[i] = a[i] - max (0, x * b[i]);
// if (mid == 6) cerr << c[i] << ' ';
sum += ((ll) x) * (a[i] + a[i] - (x - 1) * b[i]) / 2;
// cerr << i << ':' << x << ',' << sum << ';' << c[i] << '\n';
} else
c[i] = a[i];
// if (mid == 6) {
// cerr << '\n';
// cerr << s << '\n';
// for (int i = 1; i <= n; ++ i) cerr << c[i] << ' ';
// cerr << '\n';
// }
sort (c + 1, c + 1 + n, greater <int> ());
s = min (k - s, n);
for (int i = 1; i <= s; ++ i)
sum += c[i];
best = sum;
return 1;
}
int main () {
ios::sync_with_stdio (0);
cin.tie (0);
cout.tie (0);
cin >> t;
while (t --) {
cin >> n >> k;
l = best = r = 0;
for (int i = 1; i <= n; ++ i)
cin >> a[i], r = max (r, a[i]);
for (int i = 1; i <= n; ++ i)
cin >> b[i];
// mid = 6;
// cerr << check () << ' ' << best << '\n';
// return 0;
while (l <= r) {
mid = l + r >> 1;
if (check ())
r = mid - 1;
else
l = mid + 1;
}
// cerr << r + 1 << '\n';
// mid = 6;
// cerr << check () << ' ' << best << '\n';
cout << best << '\n';
}
I AK IOI
}
/*
1
5 9
32 52 68 64 14
18 14 53 24 8
*/