题目:

Description

要求在平面直角坐标系下维护两个操作:

  1. 在平面上加入一条线段。记第i条被插入的线段的标号为i。
  2. 给定一个数k,询问与直线 x = k相交的线段中,交点最靠上的线段的编号。

题解:

同[SDOI 2016]游戏
还要简单一些,就不写题解了.

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
inline void read(ll &x){x=0;char ch;bool flag = false;while(ch=getchar(),ch<'!');if(ch == '-') ch=getchar(),flag = true;while(x=10*x+ch-'0',ch=getchar(),ch>'!');if(flag) x=-x;
}
const ll maxn = 100010;
const ll maxp = 40010;
const double eps = 1e-9;
inline ll dcmp(double x){return (x > eps) - (x < -eps);
}
struct Node{double k,b;ll id;bool vis;Node(){id = 0;k = b = 0;}
}T[maxn<<2];
ll L,R,idx;double K,B;
inline void solve(ll rt,ll l,ll r){if(T[rt].vis == false){T[rt].k = K;T[rt].b = B;T[rt].id = idx;T[rt].vis = true;return ;}double y0 = T[rt].k*l + T[rt].b;double y1 = K*l + B;double y2 = T[rt].k*r + T[rt].b;double y3 = K*r + B;if(dcmp(y1-y0) > 0 && dcmp(y3 - y2) > 0){if(dcmp(K-T[rt].k) == 0 && dcmp(B - T[rt].b) == 0) return;T[rt].k = K;T[rt].b = B;T[rt].id = idx;return ;}if(dcmp(y1-y0) <= 0 && dcmp(y3 - y2) <= 0) return ;ll mid = l+r >> 1;solve(rt<<1,l,mid);solve(rt<<1|1,mid+1,r);
}
inline void insert(ll rt,ll l,ll r){if(L <= l && r <= R){solve(rt,l,r);return ;}ll mid = l+r >> 1;if(L <= mid) insert(rt<<1,l,mid);if(R >  mid) insert(rt<<1|1,mid+1,r);
}
inline void insert(ll x0,ll x1,ll y0,ll y1,ll num){L = x0;R = x1;K = (double)(y1-y0)/(double)(x1-x0);B = y0 - x0*K;idx = num;insert(1,1,maxp);
}
typedef pair<ll,ll> pa;
double ans;ll ans_id;
inline void query(ll rt,ll l,ll r,ll pos){double x = T[rt].k*pos + T[rt].b;if(dcmp(x-ans) == 1 || (dcmp(x-ans) == 0 && T[rt].id < ans_id)) ans = x,ans_id = T[rt].id;if(l == r) return ;ll mid = l+r >> 1;if(pos <= mid) query(rt<<1,l,mid,pos);else query(rt<<1|1,mid+1,r,pos);
}
ll a[maxn],id[maxn];
int main(){ll n;read(n);ll lastans = 0;ll op,x0,y0,x1,y1,x;ll num = 0;while(n--){read(op);if(op == 0){read(x);x = ((x +lastans-1)%39989+1);ans = ans_id = 0;query(1,1,maxp,x);if(ans < a[x] || (ans == a[x] && id[x] < ans_id)) ans_id = id[x];printf("%d\n",lastans = ans_id);}else if(op == 1){++ num;read(x0);read(y0);read(x1);read(y1);x0 = (x0+lastans-1)%39989+1;y0 = (y0+lastans-1)%1000000000+1;x1 = (x1+lastans-1)%39989+1;y1 = (y1+lastans-1)%1000000000+1;if(x0 > x1) swap(x0,x1),swap(y0,y1);if(x0 == x1 ){if(max(y0,y1) > a[x0]) a[x0] = max(y0,y1),id[x0] = num;}else insert(x0,x1,y0,y1,num);}}   getchar();getchar();return 0;
}

转载于:https://www.cnblogs.com/Skyminer/p/6561686.html

bzoj 3165: [Heoi2013]Segment 线段树相关推荐

  1. BZOJ 3165 Heoi2013 Segment 线段树

    题目大意:给定一个平面,多次插入一条线段,以及询问某个x值能截到的最大纵坐标 OTZ 一份详细的网址:http://hi.baidu.com/wyl8899/item/2deafd3a376ef2d4 ...

  2. BZOJ.3165.[HEOI2013]Segment(李超线段树)

    BZOJ 洛谷 对于线段,依旧是存斜率即可. 表示精度误差一点都不需要管啊/托腮 就我一个人看成了mod(10^9+1)吗.. //4248kb 892ms #include <cstdio&g ...

  3. BZOJ.1558.[JSOI2009]等差数列(线段树 差分)

    BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...

  4. BZOJ 2124 等差子序列 线段树维护哈希

    $ \Rightarrow $ 戳我进BZOJ原题 等差子序列 Time Limit: 3 Sec $ \quad $ Memory Limit: 259 MB Description 给一个 $ 1 ...

  5. BZOJ.3938.Robot(李超线段树)

    BZOJ UOJ 以时间\(t\)为横坐标,位置\(p\)为纵坐标建坐标系,那每个机器人就是一条\(0\sim INF\)的折线. 用李超线段树维护最大最小值.对于折线分成若干条线段依次插入即可. 最 ...

  6. [FJOI 2016]bzoj 4408 神秘数 - 线段树

    题目大意:给你一列数,多次询问用一个区间的数字形成一个可重集合,最小的不能被表示为其一个子集的数字是多少. 题解:考虑给你一个可重集合你怎么算:从小到大排序,假设用前x个数字不能表示的最小都数字是an ...

  7. BZOJ 4422 Cow Confinement (线段树、DP、扫描线、差分)

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=4422 我真服了..这题我能调一天半,最后还是对拍拍出来的...脑子还是有病啊 题解: ...

  8. BZOJ 1135 [POI2009]Lyz 线段树

    题意:链接 方法:线段树维护子区间最值. 解析: 我们可以推出来一个式子. 就是如果满足题意的话. 那么任意一个子区间[l,r] f[i]表示穿i的鞋的人数 (r−l+1+d)∗k>=∑f[i] ...

  9. BZOJ[1135][POI2009]Lyz 线段树

    传送门ber~ 如果某时不合法,那一定存在某段满足 (r−l+1+d)∗k<Σl≤i≤rnumi(r−l+1+d)∗k<Σl≤i≤rnumi (r-l+1+d)*k (其中 numinum ...

  10. bzoj 1503 (权值线段树)

    由于蒟蒻实在是ttttttai 菜了,于是开始了学习主席树,权值线段树作为主席树的前置知识,于是蒟蒻各种百度百度,谷歌谷歌,抄网上的代码,然后终于A了这个题目.也还算是有一点收获. 题目:芝麻开门 题 ...

最新文章

  1. 从assemblyer Instructure deepth understander C principle
  2. 说说第三方支付接口开发及开发中遇到的坑爹问题
  3. 游戏外挂设计技术探讨
  4. 深度学习(二)theano学习笔记(1)环境搭建
  5. 实际应用中git(合并本地与服务器项目)
  6. Apache Hudi x Pulsar Meetup杭州站火爆来袭,实践干货就等你来!
  7. 【编程好习惯】通过命名规则区分变量
  8. 机械制图与计算机绘图的区别,机械制图与计算机绘图教案.doc
  9. 一个数根号3怎样用计算机计算,手机计算器怎样打出根号3
  10. 万年历黄历星座查询v3.6.9引流吸粉 实用工具 流量变现小程序
  11. 万事开头难!迈出第一步……
  12. 职场上,怎么对待那些总是以领导口吻给自己安排工作的同事
  13. MyBatisPlus自动填充
  14. 小程序 朋友圈,点赞 ,评论,发布动态,功能,局部刷新数据之 -----评论
  15. Prompt Engineering 入门(二)
  16. Android性能优化之解密ZAKER,网易云阅读等新闻应用的内容缓存加载方式
  17. 『算法』.Net 字符串计算算法
  18. 英国宣判维基解密创始人阿桑奇因违反保释条例判刑入狱将近一年
  19. SpringBoot控制台打印SQL
  20. java中eclipse中运行程序的快捷键是什么?

热门文章

  1. webstorm中代码添加单引号、双引号快捷键
  2. 爱创课堂每日一题第四十八天- html5有哪些新特性、移除了那些元素?
  3. NO.170 六问禅道1:为什么任务的剩余工时不自动更新?
  4. 快切-开源中文css框架之纯css透明
  5. 如何编写可移植的c/c++代码
  6. 【转载】关于大型asp.net应用系统的架构-架构的选择
  7. cfda计算机管理化系统,计算机化系统清单
  8. 台式机dp接口_2K至4K显示器性价比线材选购攻略,毕亚兹 DP高清线入手
  9. android wheel控件滚动,android 滚动选择插件 android-wheel
  10. Unity 序列化的问题