第 31 行一直报错。
报错信息:[Error] cannot convert 'std::vector<long long int>::iterator {aka __gnu_cxx::__normal_iterator<long long int*, std::vector<long long int> >}' to 'long long int*' for argument '1' to 'long long int bin_search(long long int*, long long int*, long long int)'
#include<cstdio>
#include<vector>
#include<set>
#include<algorithm>
#define int long long
using namespace std;
const int N=5e5+10; int n,k; vector<int>a[N]; multiset<int>ans;
void dfs(int kk,int sum) {
if(kk==n+1) {
//printf("A%lld\n",sum);
if(ans.size()<k) ans.insert(sum);
else {
multiset<int>::iterator it=--ans.end(); //printf("B%lld\n",*it);
if(sum<*it) ans.erase(it),ans.insert(sum);
}
return;
}
for(auto i:a[kk]) dfs(kk+1,sum+i);
}
int bin_search(int *aa,int *an,int ai) {
int l=0,r=an-aa;
while(l<r) {
int mid=(l+r)>>1;
if(aa[mid]>ai) r=mid;
else l=mid+1;
}
return l;
}
int get_rank(int sum) {
int rank=0;
for(auto i:a[1]) rank+=bin_search(a[2].begin(),a[2].end(),sum-i);//这里报错
return rank;
}
int solve() {
int l=0,r=a[1][a[1].size()-1]+a[2][a[2].size()-1];
while(l<r) {
int mid=(l+r)>>1;
if(get_rank(mid)<k) l=mid+1;
else r=mid;
}
return l;
}
signed main() {
//freopen("sequence.in","r",stdin);
//freopen("sequence.out","w",stdout);
scanf("%lld",&n);
for(int i=1;i<=n;i++) {
int l; scanf("%lld",&l);
for(int j=1,k;j<=l;j++) scanf("%lld",&k),a[i].push_back(k);
sort(a[i].begin(),a[i].end());
}
scanf("%lld",&k);
if(n<=2) {
dfs(1,0);
if(ans.size()<k) printf("-1");
else {
for(int i=1;i<k;i++) ans.erase(ans.begin());
printf("%lld",*ans.begin());
}
}
else {
if(1ll*a[1].size()*a[2].size()<k) return printf("-1"),0;
int sum=solve();
for(int i=3;i<=n;i++) sum+=a[i][0];
printf("%lld",sum);
}
return 0;
}