用了upper_bound之后......
有没有大佬能善良地帮我看一下(主要看upper_bound,当然有其他建议也虚心接受),鄙人感激不尽!
本蒟蒻第一次用upper_bound,大佬轻点喷。
#include <bits/stdc++.h>
using namespace std;
#define fastio ios::sync_with_stdio(false),cin.tie(NULL),cout.tie(NULL)
const int N = 2e5 + 5;
int n,magic[N],q,t;
int l,v,w[N];
//double l,v,w[N];
void calculate_w () {
w[0] = l;
// w[0] = l / v;
for (int i = 1;i <= n;++i)
w[i] = w[i - 1] + magic[i];
// w[i] = w[i - 1] + magic[i] / v;
}
int find_t (int t) {
/*
for (int i = 0;i <= n;++i)
if (w[i] > t)
return i;
return -1;
*/
if (w[n] <= t)
return -1;
/*
int ans;
int l = 0,r = n,mid;
while (l <= r) {
mid = (l + r) >> 1;
if (w[mid] > t) {
ans = mid;
r = mid - 1;
}
else
l = mid + 1;
}
return ans;
*/
return upper_bound(w,w + 1 + n,t) - w;
}
bool cmp (int a,int b) {
return a > b;
}
int main () {
fastio;
cin >> n >> l >> v;
for (int i = 1;i <= n;++i)
cin >> magic[i];
sort(magic + 1,magic + 1 + n,cmp);
calculate_w();
cin >> q;
while (q--) {
cin >> t;
t = t * v;
cout << find_t(t) << "\n";
}
/*
for (int i = 0;i <= n;++i)
cout << w[i] << " ";
cout << "\n";
for (int i = 1;i <= n;++i)
cout << magic[i] << " ";
*/
return 0;
}