看完题解打的二分不知道哪里错了
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n,m;
const int mod=1e9+7;
int dp[200010];
int x[1010],y[1010];
long long ans;int a,b;
bool check(int x){
dp[max(x+100000,0ll)]+b>=x+a;
}
signed main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>x[i]>>y[i];
for(int i=0;i<=200000;i++) dp[i]=-0x3f3f3f3f;
dp[100000]=0;
for(int i=1;i<=n;i++){
if(x[i]>=0){
for(int j=200000;j>=x[i];j--){
dp[j]=max(dp[j],dp[j-x[i]]+y[i]);
}
}else{
for(int j=0;j<=200000+x[i];j++){
dp[j]=max(dp[j],dp[j-x[i]]+y[i]);
}
}
}
for(int j=199999;j>=0;j--){
dp[j]=max(dp[j],dp[j+1]);
}
//for(int i=1;i<=10;i++) cout<<dp[i]<<endl;
cin>>m;
for(int i=1;i<=m;i++){
cin>>a>>b;
int l=-1e14,r=100000+a;
while(l<r){
//out<<l<<" "<<r<<endl;
int mid=(l+r+1)>>1;
if(check(mid-a)) l=mid;
else r=mid-1;
}
cout<<l<<"\n";
}
return 0;
}