为啥这样写样例有些数据死循环
#include<bits/stdc++.h>
using namespace std;
int k;
int n[500005],d[500005],e[500005];
int main(){
cin>>k;
for(int i=1;i<=k;i++){
cin>>n[i]>>d[i]>>e[i];
}
for(int i=1;i<=k;i++){
int m=(n[i]-e[i]*d[i]+2);
int l=1,r=m/2;
bool flag=true;
while(l<r){
int mid=l+r/2;
if(mid*(m-mid)>n[i]){
r=mid-1;
}
if(mid*(m-mid)<n[i]){
l=mid+1;
}
if(mid*(m-mid)==n[i]){
flag=false;
cout<<mid<<' '<<(m-mid)<<endl;
break;
}
}
if(flag){
cout<<"NO"<<endl;
}
}
return 0;
}