WA on #10,90分。
将所有vector改为数组后仍过不去。
提交记录 : https://www.luogu.com.cn/record/226780189
#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define pii pair<int,int>
inline int read(){
int x=0,f=1;char C=getchar();
while(C<'0'||C>'9'){if(C=='-')f=-1;C=getchar();}
while(C>='0'&&C<='9')x=x*10+(C^48),C=getchar();
return x*f;
}
inline void write(int x){
if(x<0){putchar('-'); x=-x;}
if(x>9)write(x/10);
putchar(x%10+'0');
}
bool Ck(char c){return c!=' '&&c!='\n'&&c!='\r';}
inline void rd(char s[], int &n){
n=0;
s[++n]=getchar();
while(!Ck(s[n]))s[n]=getchar();
while(Ck(s[n]))s[++n]=getchar();
--n;
}
const int N = 2e5+5;
bool St;
struct Node{
int l,r,x;
};
vector<Node>A,B;
vector<pii>AB,CD;
void work(int n,vector<Node> &A){
A.clear();
int l = 1, r = 0;
while(l <= n){
r = n / (n / l);
A.push_back({l,r,n/l});
l = r + 1;
}
}
void check(vector<Node> A, vector<Node> B, vector<pii> &C){
C.clear();
int n1 = A.size(), n2 = B.size();
int p1 = 0, p2 = 0, cur = 0;
while(p1 < n1 && p2 < n2){
if(A[p1].r < B[p2].r){
if(A[p1].x < B[p2].x){
C.push_back({cur + 1, A[p1].r});
}
cur = A[p1++].r;
}
else if(A[p1].r > B[p2].r){
if(A[p1].x < B[p2].x){
C.push_back({cur + 1, B[p2].r});
}
cur = B[p2++].r;
}
else{
if(A[p1].x < B[p2].x){
C.push_back({cur + 1, A[p1].r});
}
cur = A[p1++].r;
p2++;
}
}
while(p2 < n2){
C.push_back({cur + 1, B[p2].r});
cur = B[p2++].r;
}
}
void solve(){
int a,b,c,d;
a=read();b=read();c=read();d=read();
--a;--c;
work(a,A); work(b,B); check(A,B,AB);
work(c,A); work(d,B); check(A,B,CD);
while(!AB.empty() && !CD.empty()){
int l1 = AB.back().first, r1 = AB.back().second;
int l2 = CD.back().first, r2 = CD.back().second;
if(r1 < l2){
CD.pop_back();continue;
}
if(r2 < l1){
AB.pop_back();continue;
}
if(l1 <= r2 && r2 <= r1){
cout << r2 << endl;
return;
}
if(l2 <= r1 && r1 <= r2){
cout << r1 << endl;
return;
}
}
}
bool Ed;
signed main()
{
//freopen("data.txt","r",stdin);
//cerr<< (&Ed - &St) / 1024 / 1024.0 << endl;
int T = read();
while(T--){
solve();
}
return 0;
}