这题不可以二分吗?wa5
查看原帖
这题不可以二分吗?wa5
1122530
elpsconr楼主2024/9/25 01:15
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define PII pair<int,int>
#define tul tuple<int,int,int>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define rep_(i,a,b) for(int i=a;i>=b;--i)
#define all(x) x.begin(),x.end()
#define cy cout<<"YES"<<endl
#define cn cout<<"NO"<<endl 
#define lc (rt<<1)
#define rc (rt<<1|1)
mt19937_64 rnd(time(0));
const int N=3e5+6,yyx=998244353;
int n,q,a[N];
int check(int x,int k){
    __int128 res=0;
    int d=log2(x)+1;
    int p=(1<<d)-1;
    rep(i,1,n){
        if((a[i]&x)<x){
            res+=(x-(p&a[i]));
        }
    }
    return res<=k;
}
inline void solve(){
  cin>>n>>q;
  __int128 res=0;
  rep(i,1,n) cin>>a[i],res+=a[i];
  while(q--){
    int k;cin>>k;
    int l=-1,r=k+res+1;
    while(l+1<r){
        int m=l+r>>1;
        if(check(m,k)) l=m;
        else r=m;
    }
    cout<<l<<endl;
  }
}
signed main(){
  cin.tie(0)->sync_with_stdio(0);
  //freopen("D://321//in.txt","r",stdin);
  //freopen("D://321//out.txt","w",stdout);
  int _=1;
  //cin>>_;
  while(_--)
  solve();
  return 0;
}
2024/9/25 01:15
加载中...