【题解】Luogu P4097 [HEOI2013]Segment
原题传送门
这珂以说是李超线段树的模板题
按着题意写就行了,时间复杂度为\(O(n\log^2n)\)
#include <bits/stdc++.h>
#define N 40005
#define db double
#define getchar nc
using namespace std;
inline char nc(){
static char buf[100000],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
inline int read()
{
register int x=0,f=1;register char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return x*f;
}
inline void write(register int x)
{
if(!x)putchar('0');if(x<0)x=-x,putchar('-');
static int sta[20];register int tot=0;
while(x)sta[tot++]=x%10,x/=10;
while(tot)putchar(sta[--tot]+48);
}
inline db Max(register db a,register db b)
{
return a>b?a:b;
}
struct node{
db k,b;
int id;
node(register int ax=0,register int ay=0,register int bx=0,register int by=0,register int ID=0)
{
id=ID;
if(ax==bx)
k=0,b=Max(ay,by);
else
k=(db)(ay-by)/(ax-bx),b=(db)ay-k*ax;
}
inline db getv(register int x)
{
return k*x+b;
}
};
inline bool cmp(register node a,register node b,register int x)
{
if(!a.id)
return 1;
return a.getv(x)!=b.getv(x)?a.getv(x)<b.getv(x):a.id<b.id;
}
node tr[N<<2];
inline void insert(register int x,register int l,register int r,register node v)
{
if(!tr[x].id)
tr[x]=v;
if(cmp(tr[x],v,l))
swap(tr[x],v);
if(l==r||tr[x].k==v.k)
return;
int mid=l+r>>1;
db X=(tr[x].b-v.b)/(v.k-tr[x].k);
if(X<l||X>r)
return;
if(X<=mid)
insert(x<<1,l,mid,tr[x]),tr[x]=v;
else
insert(x<<1|1,mid+1,r,v);
}
inline void Insert(register int x,register int l,register int r,register int L,register int R,register node v)
{
if(L<=l&&r<=R)
{
insert(x,l,r,v);
return;
}
int mid=l+r>>1;
if(L<=mid)
Insert(x<<1,l,mid,L,R,v);
if(R>mid)
Insert(x<<1|1,mid+1,r,L,R,v);
}
inline node query(register int x,register int l,register int r,register int pos)
{
if(l==r)
return tr[x];
int mid=l+r>>1;
node tmp;
if(pos<=mid)
tmp=query(x<<1,l,mid,pos);
else
tmp=query(x<<1|1,mid+1,r,pos);
return cmp(tr[x],tmp,pos)?tmp:tr[x];
}
int n,m,lans=0,cnt=0;
#define p1 39989
#define p2 1000000000
int main()
{
m=read(),n=40000;
while(m--)
{
int opt=read();
if(opt==0)
{
int x=read();
x=(x+lans-1)%p1+1;
lans=query(1,1,n,x).id;
write(lans),puts("");
}
else
{
int ax=read(),ay=read(),bx=read(),by=read();
ax=(ax+lans-1)%p1+1,bx=(bx+lans-1)%p1+1;
ay=(ay+lans-1)%p2+1,by=(by+lans-1)%p2+1;
if(ax>bx)
{
ax^=bx^=ax^=bx;
ay^=by^=ay^=by;
}
Insert(1,1,n,ax,bx,node(ax,ay,bx,by,++cnt));
}
}
return 0;
}
【题解】Luogu P4097 [HEOI2013]Segment的更多相关文章
- Luogu P4097 [HEOI2013]Segment 李超线段树
题目链接 \(Click\) \(Here\) 李超线段树的模板.但是因为我实在太\(Naive\)了,想象不到实现方法. 看代码就能懂的东西,放在这里用于复习. #include <bits/ ...
- 洛谷 P4097 [HEOI2013]Segment 解题报告
P4097 [HEOI2013]Segment 题目描述 要求在平面直角坐标系下维护两个操作: 在平面上加入一条线段.记第 \(i\) 条被插入的线段的标号为 \(i\) 给定一个数 \(k\),询问 ...
- P4097 [HEOI2013]Segment(李超树)
链接 https://www.luogu.org/problemnew/show/P4097 https://www.lydsy.com/JudgeOnline/problem.php?id=3165 ...
- 洛谷P4097 [HEOI2013]Segment(李超线段树)
题面 传送门 题解 调得咱自闭了-- 不难发现这就是个李超线段树,不过因为这里加入的是线段而不是直线,所以得把线段在线段树上对应区间内拆开之后再执行李超线段树的操作,那么复杂度就是\(O(n\log^ ...
- P4097 [HEOI2013]Segment 李超线段树
$ \color{#0066ff}{ 题目描述 }$ 要求在平面直角坐标系下维护两个操作: 在平面上加入一条线段.记第 i 条被插入的线段的标号为 i 给定一个数 k,询问与直线 x = k 相交的线 ...
- [洛谷P4097] [HEOI2013] Segment
Description 要求在平面直角坐标系下维护两个操作: 1.在平面上加入一条线段.记第 \(i\) 条被插入的线段的标号为 \(i\) 2.给定一个数 \(k\) ,询问与直线 \(x = k\ ...
- 2018.07.23 洛谷P4097 [HEOI2013]Segment(李超线段树)
传送门 给出一个二维平面,给出若干根线段,求出x" role="presentation" style="position: relative;"&g ...
- P4097 [HEOI2013]Segment
传送门 简单来说就是对于每条线段,先把它拆成\(O(logn)\)条,然后对于每一条再\(O(logn)\)判断在所有子区间的优劣程度 //minamoto #include<bits/stdc ...
- Bzoj 3165 [Heoi2013]Segment题解
3165: [Heoi2013]Segment Time Limit: 40 Sec Memory Limit: 256 MBSubmit: 668 Solved: 276[Submit][Sta ...
随机推荐
- CISCO MDS – Useful ‘Show’ Commands
CISCO MDS – Useful ‘Show’ Commands CONFIG:show startup-configshow running-configshow running-config ...
- Linux ,Ubuntu 分区建议大小
分区 分区类型 文件系统 大小 /boot 逻辑分区 Ext4 300M swap 逻辑分区 交换空间 13G / 主分区 Ext4 30G /home 逻辑分区 Ext4 42G /usr 逻辑分区 ...
- 图片上传组件webuploader
前端组件webuploader 当时也是搞了很久参考这种demo,但是没记.现在事后大致总结下.直接上大概代码(我使用asp.net MVC来做的): 执行顺序:(get)Record/Add——A ...
- 对Vuex的初步了解
文章转载于:http://www.cnblogs.com/wisewrong/p/6344390.html 在 Vue.js 的项目中,如果项目结构简单, 父子组件之间的数据传递可以使用 props ...
- 永久禁止floppy模块开机自动加载
环境:Red Hat Enterprise Linux Server release 7.4 (Maipo) 问题:执行fdisk -l后系统会抓到错误 解决方案: https://access.re ...
- Java集合List、Set、Map
集合是 java 基础中非常重要的一部分,同样也是 Java 面试中很重要的一个知识点.所以,给王小整理了这篇关于集合的文章. 1.接口继承关系以及实现 集合类存放于 Java.util 包中,主要有 ...
- 改造一下jeecg中的部门树
假装有需求 关于 jeecg 提供的部门树,相信很多小伙伴都已经用过了,今天假装有那么一个需求 "部门树弹窗选择默认展开下级部门",带着这个需求再次去探索一下吧. 一.改造之前的部 ...
- GCD的简单使用方法
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/like7xiaoben/article/details/25629365 /* 创建一个队列用来运行 ...
- [Freemarker]自定义时间戳函数
使用freemarker的web项目经常需要用在Url后面加上时间戳来保证资源不被缓存,我们可以自定义方法实现时间戳. 先看freemarker配置信息: <bean id="free ...
- windows环境在本地配nginx
本地搭建了前端项目,但奈何有时候需要https访问的需求,所以做了一个尝试在本地(windows环境)下配置nginx,最终的效果就是 搭建的时候,遇到两个问题: 第一个是如果要在本地搭建https, ...