BZOJ

洛谷

对于线段,依旧是存斜率即可。

表示精度误差一点都不需要管啊/托腮

就我一个人看成了mod(10^9+1)吗。。

  1. //4248kb 892ms
  2. #include <cstdio>
  3. #include <cctype>
  4. #include <algorithm>
  5. //#define gc() getchar()
  6. #define MAXIN 300000
  7. #define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)
  8. #define mp std::make_pair
  9. #define pr std::pair<double,int>
  10. typedef long long LL;
  11. const int N=4e4+5;
  12. char IN[MAXIN],*SS=IN,*TT=IN;
  13. struct Segment_Tree
  14. {
  15. #define ls rt<<1
  16. #define rs rt<<1|1
  17. #define lson l,m,ls
  18. #define rson m+1,r,rs
  19. #define S N<<2
  20. int ID[S];
  21. double K[S],B[S];
  22. #undef S
  23. void Modify(int l,int r,int rt,int L,int R,double k,double b,int id)
  24. {
  25. if(L<=l && r<=R)
  26. {
  27. double l0=K[rt]*l+B[rt],r0=K[rt]*r+B[rt],l1=k*l+b,r1=k*r+b;
  28. if(l0>=l1 && r0>=r1) return;
  29. if(l0<l1 && r0<r1) {K[rt]=k, B[rt]=b, ID[rt]=id; return;}
  30. int m=l+r>>1;
  31. double p=(b-B[rt])/(K[rt]-k);
  32. if(l0>l1)
  33. if(p<=m) Modify(lson,L,R,K[rt],B[rt],ID[rt]), K[rt]=k, B[rt]=b, ID[rt]=id;
  34. else Modify(rson,L,R,k,b,id);
  35. else
  36. if(p<=m) Modify(lson,L,R,k,b,id);
  37. else Modify(rson,L,R,K[rt],B[rt],ID[rt]), K[rt]=k, B[rt]=b, ID[rt]=id;
  38. return;
  39. }
  40. int m=l+r>>1;
  41. if(L<=m) Modify(lson,L,R,k,b,id);
  42. if(m<R) Modify(rson,L,R,k,b,id);
  43. }
  44. pr Query(int l,int r,int rt,double x)
  45. {
  46. if(l==r) return mp(K[rt]*x+B[rt],-ID[rt]);
  47. int m=l+r>>1;
  48. return std::max(mp(K[rt]*x+B[rt],-ID[rt]),x<=m?Query(lson,x):Query(rson,x));
  49. }
  50. }T;
  51. inline int read()
  52. {
  53. int now=0;register char c=gc();
  54. for(;!isdigit(c);c=gc());
  55. for(;isdigit(c);now=now*10+c-'0',c=gc());
  56. return now;
  57. }
  58. int main()
  59. {
  60. #define n 39989
  61. #define mod 1000000000
  62. for(int Q=read(),ans=0,cnt=0; Q--; )
  63. switch(read())
  64. {
  65. case 0: printf("%d\n",ans=-T.Query(1,n,1,(read()+ans-1)%n+1).second); break;
  66. case 1:
  67. {
  68. ++cnt;
  69. int x1=(read()+ans-1)%n+1,y1=(read()+ans-1)%mod+1,x2=(read()+ans-1)%n+1,y2=(read()+ans-1)%mod+1;
  70. double k,b;
  71. if(x1>x2) std::swap(x1,x2), std::swap(y1,y2);
  72. if(x1!=x2) k=1.0*(y1-y2)/(x1-x2), b=y1-k*x1;//忘转double了==
  73. else k=0, b=std::max(y1,y2);
  74. T.Modify(1,n,1,x1,x2,k,b,cnt);
  75. break;
  76. }
  77. }
  78. return 0;
  79. }

BZOJ.3165.[HEOI2013]Segment(李超线段树)的更多相关文章

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

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

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

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

  3. BZOJ3165: [Heoi2013]Segment(李超线段树)

    题意 题目链接 Sol 李超线段树板子题.具体原理就不讲了. 一开始自己yy着写差点写自闭都快把叉积搬出来了... 后来看了下litble的写法才发现原来可以写的这么清晰简洁Orz #include& ...

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

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

  5. BZOJ3165[Heoi2013]Segment——李超线段树

    题目描述 要求在平面直角坐标系下维护两个操作: 1.在平面上加入一条线段.记第i条被插入的线段的标号为i. 2.给定一个数k,询问与直线 x = k相交的线段中,交点最靠上的线段的编号. 输入 第一行 ...

  6. 【BZOJ-3165】Segment 李超线段树(标记永久化)

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

  7. Bzoj 3165 [Heoi2013]Segment题解

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

  8. bzoj 3165: [Heoi2013]Segment 动态凸壳

    3165: [Heoi2013]Segment Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 202  Solved: 89[Submit][Stat ...

  9. BZOJ 3165: [Heoi2013]Segment

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

随机推荐

  1. shell 按序删除文件

    一.按时间排序 cd /data/wosbak/hrs/pre/ && ls -A -t | awk '{if(NR>15){print $9}}' | xargs rm -rf ...

  2. gitlab使用--汉化及修改端口

    汉化思路:去gitlab汉化社区下载对应的汉化版本,这个文件和当前版本对比形成一个补丁,打入到当前配置文件中 1.查看当前gitlab版本 head  -1(数字)    /opt/gitlab/ve ...

  3. K/3 Cloud Web API接口说明文

    K/3 Cloud Web API接口说明文 目的 三方集成,提供第三方系统与Cloud集成调用接口. 技术实现 HTTP + Json 提供标准接口 编号 名称 说明 1 Kingdee.BOS.W ...

  4. 微信小程序API 登录-wx.login(OBJECT) + 获取微信用户唯一标识openid | 小程序

    wx.login(OBJECT) 调用接口获取登录凭证(code)进而换取用户登录态信息,包括用户的唯一标识(openid) 及本次登录的 会话密钥(session_key).用户数据的加解密通讯需要 ...

  5. Visual Studio 2017离线安装失败:安装程序清单签名验证失败

    解决办法: 方法1:运行gpeidit.msc,然后  Windows 设置-安全设置->本地策略-安全选项-系统机密->将FIPS兼容算法用于加密.哈希和签名-设置禁用 方法2:删除vs ...

  6. WMSYS.WM_CONCAT返回CLOB类型的解决办法

    https://blog.csdn.net/cnm_csdn_wt/article/details/80047878

  7. [转] Mongoose简要API

    Mongoose是在node.js环境下对mongodb进行便捷操作的对象模型工具 因此,要使用mongoose,则必须安装node.js环境以及mongodb数据库.mongoose使mongodb ...

  8. JSP中三大指令

    JSP指令概述 JSP指令的格式:<%@指令名 attr1=”” attr2=”” %>,一般都会把JSP指令放到JSP文件的最上方,但这不是必须的.  JSP中的指令共有三个:page. ...

  9. Adjoint operators $T_K$ and $T_{K^{*}}$ in BEM

    In our last article, we introduced four integral operators in the boundary integral equations in BEM ...

  10. MyBatis的Mapper接口以及Example的实例函数及详解

    来源:https://blog.csdn.net/biandous/article/details/65630783 一.mapper接口中的方法解析 mapper接口中的函数及方法 方法 功能说明 ...