DQYdqy @ 2018-12-21 12:51:03
为什么最后两个点挂了,用标程对拍了1个多小时也没错
Code:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e7;
const int pps=1e9;
const int fhq=39989;
typedef double dl;
int n,cnt,ans,t=1;
struct line{
int l,r;dl k,b;
inline dl f(int x){return k*x+b;}
void newnode(int x1,int y1,int x2,int y2){
if(x1==x2){l=r=x1;k=0;b=max(y1,y2);}
else{
if(x1>x2)swap(x1,x2),swap(y1,y2);
l=x1,r=x2;k=(dl)(y2-y1)/(x2-x1);b=y1-x1*k;
}
}
}fun[N*2];
struct sgt{
int maxans,ansid,tag[N*2];
inline void ins(int q,int lm,int rm,int id){
if(fun[id].l>rm||fun[id].r<lm)return ;
if(fun[id].l<=lm&&fun[id].r>=rm){
int u1=(fun[id].f(lm)>fun[tag[q]].f(lm));
int u2=(fun[id].f(rm)>fun[tag[q]].f(rm));
if(!tag[q]||(u1&&u2)){tag[q]=id;return ;}
if(u1^u2){
int mid=(lm+rm)>>1;
dl key=(fun[id].b-fun[tag[q]].b)/(fun[tag[q]].k-fun[id].k);
if(key<=mid&&u1)ins(q<<1,lm,mid,id);
else if(key<=mid&&u2)ins(q<<1,lm,mid,tag[q]),tag[q]=id;
else if(key>mid&&u1)ins(q<<1|1,mid+1,rm,tag[q]),tag[q]=id;
else if(key>mid&&u2)ins(q<<1|1,mid+1,rm,id);
}
}else{
int mid=(lm+rm)>>1;
if(lm==rm)return ;
ins(q<<1,lm,mid,id);ins(q<<1|1,mid+1,rm,id);
}
}
inline void query(int q,int lm,int rm,int x){
if(x<lm||x>rm)return ;
if(tag[q]){
dl val=fun[tag[q]].f(x);
if(maxans<val||(maxans==val&&ansid>=tag[q]))
maxans=val,ansid=tag[q];
}
if(lm==rm)return ;
int mid=(lm+rm)>>1;
query(q<<1,lm,mid,x);query(q<<1|1,mid+1,rm,x);
}
inline int getans(int x){
ansid=2147483647;maxans=-2147483647;
query(1,1,N,x);
return ansid>=2147483647?0:ansid;
}
}T;
inline int read(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-f;ch=getchar();}
while(isdigit(ch)){x=x*10+ch-48;ch=getchar();}
return x*f;
}
signed main(){
n=read();
begin:if(t>n)return 0;t++;
int opt=read();
if(opt){
int a,b,c,d;a=read(),b=read(),c=read(),d=read();
a=(a+ans-1)%fhq+1;b=(b+ans-1)%pps+1;
c=(c+ans-1)%fhq+1;d=(d+ans-1)%pps+1;
fun[++cnt].newnode(a,b,c,d);
T.ins(1,1,N,cnt);
}else{
int x=read();x=(x+ans-1)%fhq+1;
ans=T.getans(x);
printf("%lld\n",ans);
}
goto begin;
}
by _____hzf_____ @ 2018-12-21 12:52:20
虽然说刚学OI的萌新用李超线段树写紫题我也不是第一次见到。。
by VenusM1nT @ 2018-12-21 12:52:38
您好,请问您为什么要强调您刚学OI还是个妹子呢?
by DQYdqy @ 2018-12-21 13:00:55
@Venus 总不能说是十年OI的壮汉求教吧。。。
by 海洋 @ 2018-12-21 13:19:35
您好,为什么要强调您刚学OI还是个妹子呢?
by 用户已注销 @ 2018-12-21 13:30:20
刚学OI的妹子->学久了就变成汉子了
by 吹雪吹雪吹 @ 2018-12-22 10:04:53
您这标题是真的还是假的。。。
如果是妹子的话请这边登记下手机微信QQ身份证