原题传送门

这珂以说是李超线段树的模板题

按着题意写就行了,时间复杂度为\(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的更多相关文章

  1. Luogu P4097 [HEOI2013]Segment 李超线段树

    题目链接 \(Click\) \(Here\) 李超线段树的模板.但是因为我实在太\(Naive\)了,想象不到实现方法. 看代码就能懂的东西,放在这里用于复习. #include <bits/ ...

  2. 洛谷 P4097 [HEOI2013]Segment 解题报告

    P4097 [HEOI2013]Segment 题目描述 要求在平面直角坐标系下维护两个操作: 在平面上加入一条线段.记第 \(i\) 条被插入的线段的标号为 \(i\) 给定一个数 \(k\),询问 ...

  3. P4097 [HEOI2013]Segment(李超树)

    链接 https://www.luogu.org/problemnew/show/P4097 https://www.lydsy.com/JudgeOnline/problem.php?id=3165 ...

  4. 洛谷P4097 [HEOI2013]Segment(李超线段树)

    题面 传送门 题解 调得咱自闭了-- 不难发现这就是个李超线段树,不过因为这里加入的是线段而不是直线,所以得把线段在线段树上对应区间内拆开之后再执行李超线段树的操作,那么复杂度就是\(O(n\log^ ...

  5. P4097 [HEOI2013]Segment 李超线段树

    $ \color{#0066ff}{ 题目描述 }$ 要求在平面直角坐标系下维护两个操作: 在平面上加入一条线段.记第 i 条被插入的线段的标号为 i 给定一个数 k,询问与直线 x = k 相交的线 ...

  6. [洛谷P4097] [HEOI2013] Segment

    Description 要求在平面直角坐标系下维护两个操作: 1.在平面上加入一条线段.记第 \(i\) 条被插入的线段的标号为 \(i\) 2.给定一个数 \(k\) ,询问与直线 \(x = k\ ...

  7. 2018.07.23 洛谷P4097 [HEOI2013]Segment(李超线段树)

    传送门 给出一个二维平面,给出若干根线段,求出x" role="presentation" style="position: relative;"&g ...

  8. P4097 [HEOI2013]Segment

    传送门 简单来说就是对于每条线段,先把它拆成\(O(logn)\)条,然后对于每一条再\(O(logn)\)判断在所有子区间的优劣程度 //minamoto #include<bits/stdc ...

  9. Bzoj 3165 [Heoi2013]Segment题解

    3165: [Heoi2013]Segment Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 668  Solved: 276[Submit][Sta ...

随机推荐

  1. CodeForces #549 Div.2 C Queen

    题目 水题,dfs #include <iostream> #include <stdio.h> #include <algorithm> using namesp ...

  2. HAProxy 实现 mysql 负载均衡

    通过yum 安装和配置HAProxy # yum install -y haproxy     #安装haproxy # rpm -qa | grep haproxy     #查看安装的haprox ...

  3. Spring IOC原理解读 面试必读

    Spring源码解析:Bean实例的创建与初始化 一. 什么是Ioc/DI? 二. Spring IOC体系结构 (1) BeanFactory (2) BeanDefinition 三. IoC容器 ...

  4. cesium 飞线 瓣体传感器(雷达扫描) 效果

    参考:github地址 本人新手,npm webpack 这些还是一知半解,只记录自己得到成功结果的操作步骤,可能存在多余或错误的步骤. 1.github 把代码下载下来,解压. 2.webstorm ...

  5. 2018-2019-2 20165336《网络对抗技术》Exp0 Kali安装 Week1

    2018-2019-2 20165336<网络对抗技术>Exp0 Kali安装 Week1 一.选择官网kali linux系统的版本 二.配置虚拟机 根据 安装教程(https://bl ...

  6. HBuilder打包vue项目app后空白,并请求不到数据

    (解决空白问题)在打包之前一定要修改 config 目录下的 index.js 文件中的 bulid 模块打包配置项,否则会出现空白,如图   修改前 assetsPublicPath= '/',. ...

  7. jacoco统计server端功能测试覆盖率

    jacoco可以统计,功能测试时,server代码调用的覆盖情况.这里对服务器端的java代码进行统计.   操作步骤如下:   第一步:更改server的启动脚本,使用jacocoagent.jar ...

  8. hisi35xx串口驱动的完善

    鉴于hisi的uart3还没有打通,ls /dev/ | grep ttyA* ,看到的只有ttyAMA0 和ttyAMA1,且使用应用程序打开ttyAMA1设备后,使用write函数,发送,示波器观 ...

  9. vi光标移动

    1.上下左右移动 k  :上移一行 j  :下移一行 h :左移一行 l :右移一行 2.移到当前屏幕的首.中.尾部 H :移到当前屏幕的首部 M    :移到当前屏幕的中部 L :移到当前屏幕的尾部 ...

  10. iphone X 底部留白 之 ionic3 项目

       在全局css中加入   @media only screen and (device-width: 375px) and (device-height: 812px) and (-webkit- ...