题面在这里

李超线段树的裸题,不解释

示例程序:

#include<cstdio>
#include<cmath>
#include<algorithm>
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 red(){int res=0,f=1;char ch=nc();while (ch<'0'||'9'<ch) {if (ch=='-') f=-f;ch=nc();}while ('0'<=ch&&ch<='9') res=res*10+ch-48,ch=nc();return res*f;
}const int maxn=40005,xp=39989,yp=1e9;
const double eps=1e-8;
int q,lastans=0,tot=0;
struct line{double k,b;int id;line () {id=0;}line (double _k,double _b,int _id):k(_k),b(_b),id(_id) {}
};
inline line add(int a,int b,int c,int d){if (a==c) return line(0,max(b,d),++tot);double k=((double)d-b)/(c-a);return line(k,b-a*k,++tot);
}
inline int cmp(double x){if (fabs(x)<=eps) return 0;return x>0?1:-1;
}
#define Y(l,x) ((l).k*(x)+(l).b)
inline bool higher(line a,line b,int k){if (cmp(Y(a,k)-Y(b,k))==0) return a.id<b.id;return cmp(Y(a,k)-Y(b,k))>0;
}struct node{node *l,*r;int L,R;line ll;node () {}node (int _L,int _R):L(_L),R(_R) {}
}nil,base[maxn*4];
typedef node* P_node;
P_node null,Rot,len;
void init(){nil=node(0,0);null=&nil;null->l=null->r=null;len=base;
}
P_node newnode(int L,int R){*len=node(L,R); len->l=len->r=null;return len++;
}
P_node build(int L,int R){P_node x=newnode(L,R);if (L==R) return x;int mid=L+R>>1;x->l=build(L,mid); x->r=build(mid+1,R);return x;
}
void pushdown(P_node x,line l){if (x->ll.id==0) {x->ll=l;return;}if (higher(l,x->ll,x->L)) swap(l,x->ll);if (x->L==x->R||cmp(x->ll.k - l.k)==0) return;double pos=(x->ll.b - l.b)/(l.k - x->ll.k);if (pos<x->L||x->R<pos) return;int mid=x->L+x->R>>1;if (pos<=mid) pushdown(x->l,x->ll),x->ll=l;else pushdown(x->r,l);
}
void insert(P_node x,int L,int R,line l){if (R<x->L||x->R<L) return;if (L<=x->L&&x->R<=R) {pushdown(x,l);return;}insert(x->l,L,R,l); insert(x->r,L,R,l);
}
line query(P_node x,int pos){if (x->L==x->R) return x->ll;int mid=x->L+x->R>>1;line ans;if (pos<=mid) ans=query(x->l,pos);else ans=query(x->r,pos);if (higher(x->ll,ans,pos)) ans=x->ll;return ans;
}
int main(){q=red();init();Rot=build(1,xp+10);while (q--)if (red()){int a=(red()+lastans-1)%xp+1,b=(red()+lastans-1)%yp+1,c=(red()+lastans-1)%xp+1,d=(red()+lastans-1)%yp+1;if (a>c) swap(a,c),swap(b,d);insert(Rot,a,c,add(a,b,c,d));}else{int p=(red()+lastans-1)%xp+1;printf("%d\n",lastans=query(Rot,p).id);}return 0;
}

【李超线段树】BZOJ3165 [Heoi2013]Segment相关推荐

  1. [ 李超线段树 ] BZOJ3165

    裸题. #include<bits/stdc++.h> using namespace std; inline char nc(){static char buf[100000],*p1= ...

  2. 李超线段树 [Heoi2013]Segment

    问题 D: [Heoi2013]Segment 时间限制: 4 Sec 内存限制: 256 MB 题目描述 要求在平面直角坐标系下维护两个操作: 1.在平面上加入一条线段.记第i条被插入的线段的标号为 ...

  3. 【BZOJ3165】Segment(李超线段树)

    题目来源:BZOJ3165 考虑以横坐标为下标维护线段树. 在每个结点维护一个标记,表示覆盖整个结点的最高线段,注意这个标记对整个区间都有作用,无需下传. 因为只有单点询问,所以可以不用维护区间的最高 ...

  4. 【BZOJ 3165】 [Heoi2013]Segment 李超线段树

    所谓李超线段树就是解决此题一类的问题(线段覆盖查询点最大(小)),把原本计算几何的题目变成了简单的线段树,巧妙地结合了线段树的标记永久化与标记下传,在不考虑精度误差的影响下,打法应该是这样的. #in ...

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

    传送门 文章目录 题意: 思路: 题意: 实现以下两个操作: (1)(1)(1)在平面上加入一条线段.记第iii条被插入的线段的标号为iii (2)(2)(2)给定一个数kkk,询问与直线x=kx=k ...

  6. 李超线段树(Li-Chao Segment Tree)

    李超线段树 李超线段树是一种用于维护平面直角坐标系内线段关系的数据结构.它常被用来处理这样一种形式的问题:给定一个平面直角坐标系,支持动态插入一条线段,询问从某一个位置 (X,+∞)(X,+\inft ...

  7. BZOJ 1568 李超线段树

    思路: 李超线段树裸题 //By SiriusRen #include <cmath> #include <cstdio> #include <cstring> # ...

  8. 【牛客NOIP模拟】 牛牛的RPG游戏【二维偏序】【任意坐标斜率优化】【CDQ 分治】【李超线段树】

    题意: n×mn\times mn×m 的网格图,每个点有两个权值 vali,j,bufi,jval_{i,j},buf_{i,j}vali,j​,bufi,j​,从 (1,1)(1,1)(1,1) ...

  9. 【CEOI2017】Building Bridges【任意坐标斜率优化】【李超线段树】

    题意:有 nnn 个柱子,每个柱子有高度 hih_ihi​.你需要在柱子间修桥,在 i,ji,ji,j 间修桥代价为 (hi−hj)2(h_i-h_j)^2(hi​−hj​)2,桥梁只能在柱子处相交, ...

最新文章

  1. 物理引擎demo (4) —— 力、关节和马达
  2. 在VirtualBox下安装linux操作系统
  3. 天龙八部3d最新服务器,天龙八部3DIOS正版服务器整合互通公告
  4. UVA 10229 Modular Fibonacci
  5. Wi-Fi信号满格网速就一定快吗?
  6. python之知乎的正确打开方式
  7. html 手机a标签点不动,htmlunit单击javascript a标签不起作用
  8. 一文说通Dotnet Core的后台任务
  9. python读取文件名包含某字符的文件_python 读写文件时判断文件名是否包含某字符串...
  10. WinForm 处理未处理的异常 Application.ThreadException + AppDomain.CurrentDomain.UnhandledException
  11. 标准的软件开发是怎样的?
  12. AP计算机科学内容HTML,3分钟读懂AP计算机科学原理和计算机科学A的区别!
  13. 模糊控制完全理解系列(二)—— 模糊集合论基础之模糊集基础概念
  14. xshell无法显示汉字
  15. 软件测试分析流程及输出项包括哪些内容?
  16. Cocos Creator 3D 摇杆控制器一种简单实现!
  17. android twitter 分享代码,Twitter分享集成
  18. 星星之火OIer:C++大纲
  19. 湖南科技大学c语言上机题库,2018年湖南科技大学计算机科学与工程院824C语言程序设计与数据结构综合之C程序设计考研核心题库...
  20. 开拓者终变落荒者,火箭大胜进第二轮

热门文章

  1. 祝贺 Influx Technology 成为北航 AERO 大学生方程式赛车队一级赞助商
  2. 当前计算机技术在制图,浅谈计算机技术在测绘工程制图中的应用张琪平(原稿)...
  3. phpstorm 2019.2
  4. ucGUI 重绘分析(一)
  5. 考研计算机相关的复试自我介绍,计算机专业考研复试英文自我介绍模板
  6. pvr查看工具 windows 下预览
  7. IEEE 802.11 RTS/CTS 协议
  8. Filament 渲染引擎简介
  9. 华为matepad10.4适配M-Pen2教程
  10. PHP:“草根语言”挑战“大腕”Java .Net