BZOJ 3165 李超线段树
思路:
李超线段树
我是把线段转成斜率的形式搞得 不知道有没有更简单的方法
//By SiriusRen
#include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int mod1=39989,mod2=1000000000;
#define double long double
int read(){
int x=0;char p=getchar();
while(p<'0'||p>'9')p=getchar();
while(p>='0'&&p<='9')x=x*10+p-'0',p=getchar();
return x;
}
int n,K,op,cnt,ans;
double k,b,tempans;
void eli(double x1,double y1,double x2,double y2){
if(x1==x2)k=0;
else k=(y2-y1)/(x2-x1);
b=y1-k*x1;
}
struct Tree{double k,b;int id;}tr[555555];
void insert(int l,int r,int pos,double k,double b,int id,int L,int R){
int mid=(l+r)>>1,lson=pos<<1,rson=pos<<1|1;
if(l>=L&&r<=R){
if(!tr[pos].id){tr[pos].k=k,tr[pos].b=b,tr[pos].id=id;return;}
double val1=tr[pos].b+mid*tr[pos].k;
double val2=b+mid*k;
if(abs(tr[pos].k-k)<1e-15){if(tr[pos].b<b)tr[pos].b=b,tr[pos].id=id;}
else if(l==r){
if(val2>val1)tr[pos].k=k,tr[pos].b=b,tr[pos].id=id;
else if(abs(val2-val1)<1e-15)tr[pos].id=min(tr[pos].id,id);
}
else if(tr[pos].k>k){
if(val1>=val2)insert(l,mid,lson,k,b,id,L,R);
else insert(mid+1,r,rson,tr[pos].k,tr[pos].b,tr[pos].id,L,R),tr[pos].k=k,tr[pos].b=b,tr[pos].id=id;
}
else{
if(val1>=val2)insert(mid+1,r,rson,k,b,id,L,R);
else insert(l,mid,lson,tr[pos].k,tr[pos].b,tr[pos].id,L,R),tr[pos].k=k,tr[pos].b=b,tr[pos].id=id;
}return;
}
if(mid<L)insert(mid+1,r,rson,k,b,id,L,R);
else if(mid>=R)insert(l,mid,lson,k,b,id,L,R);
else insert(l,mid,lson,k,b,id,L,R),insert(mid+1,r,rson,k,b,id,L,R);
}
void query(int l,int r,int pos,int num){
int mid=(l+r)>>1,lson=pos<<1,rson=pos<<1|1;
if(tr[pos].id){
if(tempans<tr[pos].b+num*tr[pos].k)
tempans=tr[pos].b+num*tr[pos].k,ans=tr[pos].id;
else if(tempans==tr[pos].b+num*tr[pos].k)ans=min(tr[pos].id,ans);
}
if(l==r)return;
if(mid<num)query(mid+1,r,rson,num);
else query(l,mid,lson,num);
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
op=read();
if(op){
int x0=read(),y0=read(),x1=read(),y1=read();
int ax=(x0+ans-1)%mod1+1,ay=(y0+ans-1)%mod2+1;
int bx=(x1+ans-1)%mod1+1,by=(y1+ans-1)%mod2+1;
eli(1.0*ax,1.0*ay,1.0*bx,1.0*by);
insert(1,mod1,1,k,b,++cnt,min(ax,bx),max(ax,bx));
}
else{
K=read(),K=(K+ans-1)%39989+1;
ans=0,tempans=0,query(1,mod1,1,K),printf("%d\n",ans);
}
}
}
BZOJ 3165 李超线段树的更多相关文章
- bzoj 1568 李超线段树
博客:http://www.cnblogs.com/mangoyang/p/9979465.html 李超线段树支持两种操作:1:插入一条直线.2:询问在x = c与这些直线的交点中最大的y坐标. 插 ...
- 【BZOJ 3165】 [Heoi2013]Segment 李超线段树
所谓李超线段树就是解决此题一类的问题(线段覆盖查询点最大(小)),把原本计算几何的题目变成了简单的线段树,巧妙地结合了线段树的标记永久化与标记下传,在不考虑精度误差的影响下,打法应该是这样的. #in ...
- BZOJ.3938.Robot(李超线段树)
BZOJ UOJ 以时间\(t\)为横坐标,位置\(p\)为纵坐标建坐标系,那每个机器人就是一条\(0\sim INF\)的折线. 用李超线段树维护最大最小值.对于折线分成若干条线段依次插入即可. 最 ...
- BZOJ.4515.[SDOI2016]游戏(树链剖分 李超线段树)
BZOJ 洛谷 每次在路径上加的数是个一次函数,容易看出是树剖+李超线段树维护函数最小值.所以其实依旧是模板题. 横坐标自然是取个确定的距离标准.取每个点到根节点的距离\(dis[i]\)作为\(i\ ...
- 【BZOJ-3165】Segment 李超线段树(标记永久化)
3165: [Heoi2013]Segment Time Limit: 40 Sec Memory Limit: 256 MBSubmit: 368 Solved: 148[Submit][Sta ...
- 【BZOJ3165】[HEOI2013]Segment(李超线段树)
[BZOJ3165][HEOI2013]Segment(李超线段树) 题面 BZOJ 洛谷 题解 似乎还是模板题QwQ #include<iostream> #include<cst ...
- 【BZOJ1568】[JSOI2008]Blue Mary开公司(李超线段树)
[BZOJ1568][JSOI2008]Blue Mary开公司(李超线段树) 题面 BZOJ 洛谷 题解 是模板题啊. #include<iostream> #include<cs ...
- 有趣的线段树模板合集(线段树,最短/长路,单调栈,线段树合并,线段树分裂,树上差分,Tarjan-LCA,势能线段树,李超线段树)
线段树分裂 以某个键值为中点将线段树分裂成左右两部分,应该类似Treap的分裂吧(我菜不会Treap).一般应用于区间排序. 方法很简单,就是把分裂之后的两棵树的重复的\(\log\)个节点新建出来, ...
- 【BZOJ-4515】游戏 李超线段树 + 树链剖分 + 半平面交
4515: [Sdoi2016]游戏 Time Limit: 40 Sec Memory Limit: 256 MBSubmit: 304 Solved: 129[Submit][Status][ ...
随机推荐
- 18.QT消息链筛选机制以及组合键
mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> 5 #include <Q ...
- oracle 索引优化之distinct
11G R2环境: --DISTINCT测试前的准备drop table t purge;create table t as select * from dba_objects;update t se ...
- 一个登录页面的spring 逻辑过程
1.首先用户访问login.jsp 2.用户在登录页面输入用户名/密码,提交表单到服务器,Spring根据配置调用LoginController控制器响应登录请求(关键) 3.LoginControl ...
- ROS-SLAM-gmapping
前言:gmapping是最常用和成熟的slam导航算法,gmapping功能包集成了Rao-Blackwellized粒子滤波算法,为开发者隐去了复杂的内部实现. 前提:已下载并编译了相关功能包集,如 ...
- 大话主席(superslide和 touchslide)插件的使用
对于实现效果来说,插件的办事效率真的是太高了,而且里边也被处理过兼容性,用起来实在是特别方便,现在我们来说说大话主席中的slide插件,它分为pc端(superslide)和移动端(touchslid ...
- 使用 Travis-CI 的五个理由
I use the service of travis-ci now for a year. In that time the continuous integration has often poi ...
- 使用jquery获取ul中当前正在点击的li的索引
<ul class="list"> <li>哈哈</li> <li>呵呵</li> <li>嘻嘻</l ...
- Sql Server远程还原
1.假设备份文件xxxx.bak大小约300G,还原后所占用的空间为900G 2.磁盘空间只有1T,若将备份文件拷贝过来,空间剩余700G,无法成功还原,因此通过远程方式还原. 例子如下: SQLSE ...
- (转)硬盘结构,主引导记录MBR,硬盘分区表DPT,主分区、扩展分区和逻辑分区,电脑启动过程
硬盘结构硬盘有很多盘片组成,每个盘片的每个面都有一个读写磁头.如果有N个盘片.就有2N个面,对应2N个磁头(Heads),从0.1.2开始编号.每个盘片的半径均为固定值R的同心圆再逻辑上形成了一个以电 ...
- 页面定制CSS代码初探(一):页面变宽 文本自动换行 图片按比缩放
初识博客 初写博客,先在设置里选了个喜欢的模板 第一眼就爱上了呢!那极简的风格,我喜欢!!但是,应用后,却发现... 纳尼!模板上右侧那张漂亮的图片呢?!我的怎么什么都没有.没有图片好难看啊,瞬间无爱 ...