【BZOJ】【P3165】【Heoi2013】【Segment】【题解】【线段树】
2015-01-28 20:41
417 查看
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3165
题解
Code:
题解
Code:
#include<bits/stdc++.h> using namespace std; const int maxn=40001; int n=39989,m,ind; struct seg{ double k,b; int id; seg(int x0=0,int y0=0,int x1=0,int y1=0,int _id=0){ id=_id; if(x0==x1){k=0;b=max(y0,y1);} else{k=(double)(y0-y1)/(x0-x1);b=y0-k*x0;} } double get(double x){return k*x+b;} }; bool les(seg A,seg B,double x){ if(!A.id)return 1; return A.get(x)!=B.get(x)?A.get(x)<B.get(x):A.id<B.id; } struct sgt{ seg t[maxn<<2]; seg Qmax(int i,int l,int r,int ps){ if(l==r)return t[i];seg tmp; if(ps<=(l+r)/2)tmp=Qmax(i<<1,l,(l+r)/2,ps); else tmp=Qmax(i<<1|1,(l+r)/2+1,r,ps); return les(t[i],tmp,ps)?tmp:t[i]; } void insert(int i,int l,int r,seg se){ if(!t[i].id)t[i]=se; if(les(t[i],se,l))swap(t[i],se); if(l==r||t[i].k==se.k)return; double x=(t[i].b-se.b)/(se.k-t[i].k); if(x<l||x>r)return; if(x<=(l+r)/2)insert(i<<1,l,(l+r)/2,t[i]),t[i]=se; else insert(i<<1|1,(l+r)/2+1,r,se); } void insert(int i,int l,int r,int l0,int r0,seg se){ if(l0<=l&&r0>=r){insert(i,l,r,se);return;} if(l0<=(l+r)/2)insert(i<<1,l,(l+r)/2,l0,r0,se); if(r0>(l+r)/2)insert(i<<1|1,(l+r)/2+1,r,l0,r0,se); } }T; int la; int main(){ scanf("%d",&m); while(m--){ int op;scanf("%d",&op); if(op==0){ int k;scanf("%d",&k); k=(k+la-1)%39989+1; printf("%d\n",la=T.Qmax(1,1,n,k).id); }else{ int x0,y0,x1,y1;scanf("%d%d%d%d",&x0,&y0,&x1,&y1); x0=(x0+la-1)%39989+1;x1=(x1+la-1)%39989+1; y0=(y0+la-1)%int(1e9)+1;y1=(y1+la-1)%int(1e9)+1; if(x0>x1)swap(x0,x1),swap(y0,y1); T.insert(1,1,n,x0,x1,seg(x0,y0,x1,y1,++ind)); } } return 0; }
相关文章推荐
- BZOJ_3165_[Heoi2013]Segment_线段树
- 【BZOJ 3165】 [Heoi2013]Segment 李超线段树
- bzoj 3165: [Heoi2013]Segment 线段树
- [李超线段树] BZOJ3165 [Heoi2013]. Segment
- BZOJ 3165 Heoi2013 Segment 线段树
- 【bzoj3165】[Heoi2013]Segment 神奇的线段树
- [李超线段树] BZOJ 3165: [Heoi2013]Segment
- 【bzoj3165】【HEOI2013】【Segment】【线段树】
- [线段树] BZOJ 3165: [Heoi2013]Segment
- 【李超线段树】BZOJ3165 [Heoi2013]Segment
- [bzoj3165][Heoi2013]Segment——李超线段树
- bzoj 3165: [Heoi2013]Segment 动态凸壳
- bzoj 3165: [Heoi2013]Segment
- BZOJ3165 : [Heoi2013]Segment
- 李超线段树 [Heoi2013]Segment
- 【BZOJ 3165】【HEOI 2013】Segment
- BZOJ 3165: [Heoi2013]Segment 标记永久化
- 【BZOJ】【P3166】【Heoi2013】【Alo】【题解】【可持久化Trie+set】
- BZOJ3165: [Heoi2013]Segment
- BZOJ3165 & 洛谷4097:[HEOI2013]Segment——题解