0分全wa求调
查看原帖
0分全wa求调
1772213
Ahler楼主2025/7/28 09:20
#include<bits/stdc++.h>
#define cen cout << endl
#define c1 cout << 1 << " "
#define cs cout << " ";
using namespace std;
void f(){
    
}
int cnt=0;
int ans=0;
struct li{double k,b;}ar[1000009];
struct Tree{int l,r,id;}tree[10000009];
bool cmp(int i,int j,int x){//i>j?1:0
    if(ar[i].k*x+ar[i].b-ar[j].k*x-ar[j].b>1e-9){
        return 1;
    }
    if(ar[j].k*x+ar[j].b-ar[i].k*x-ar[i].b>1e-9){
        return 0;
    }
    return i<j;
}
void insert(int &x,int l,int r,int sl,int sr,int now){
    if(r<sl||sr<l){
        return;
    }
    if(!x){
        x=++cnt;
    }
    if(sl<=l&&r<=sr){
        if(cmp(now,tree[x].id,l)&&cmp(now,tree[x].id,r)){
            tree[x].id=now;
            return;
        }
        if(cmp(tree[x].id,now,l)&&cmp(tree[x].id,now,r)){
            return;
        }
        int mid=(l+r)/2;
        if(cmp(now,tree[x].id,mid)){
            swap(now,tree[x].id);
        }
        if(cmp(now,tree[x].id,l)){
            insert(tree[x].l,l,mid,sl,sr,now);
        }
        if(cmp(now,tree[x].id,r)){
            insert(tree[x].r,mid+1,r,sl,sr,now);
        }
    }
    else{
        int mid=(l+r)/2;
        insert(tree[x].l,l,mid,sl,sr,now);
        insert(tree[x].r,mid+1,r,sl,sr,now);
    }
}
void query(int x,int l,int r,int s){
    if(!x||tree[x].r<l||r<tree[x].l){
        return;
    }
    if(cmp(tree[x].id,ans,s)){
        ans=tree[x].id;
    }
    int mid=(l+r)/2;
    query(tree[x].l,l,mid,s);
    query(tree[x].r,mid+1,r,s);
}
signed main(){
    int q;
    cin >> q;
    int lastans=0;
    int i=0;
    while(q--){
        int op;
        cin >> op;
        if(op){
            int a,b,c,d;
            cin >> a >> b >> c >> d;
            a=(a+lastans-1)%39989+1;
            b=(b+lastans-1)%100000000+1;
            c=(c+lastans-1)%39989+1;
            d=(d+lastans-1)%100000000+1;
            i++;
            if(a>c){
                swap(a,c);
                swap(b,d);
            }
            if(a==c){
                ar[i].k=0;
                ar[i].b=max(b,d);
            }
            else{
                ar[i].k=1.0*(d-b)/(c-a);
                ar[i].b=1.0*b-ar[i].k*a;
            }
            int temp=0;
            insert(temp,1,39989,a,c,i);
        }
        else{
            ans=0;
            int x;
            cin >> x;
            x=(x+lastans-1)%39989+1;
            query(1,1,39989,x);
            lastans=ans;
            cout << ans;
            cen;
        }
    }
	return 0;
}
2025/7/28 09:20
加载中...