loj 6034 线段游戏
题目大意:
给出若干条线段,用 (x1,y2),(x2,y2) 表示其两端点坐标,现在要求支持两种操作:
0 x1 y1 x2 y2表示加入一条新的线段 (x1,y2),(x2,y2)1 x0询问所有线段中,x坐标在 x0 处的最高点的 y 坐标是什么,如果对应位置没有线段,则输出
思路:
使用李超树维护
每一个加入的线段 在它能覆盖的线段树区间中修改
修改的时候判断它是否在中点的位置更优
然后将这个区间原来维护的线段与新线段比较
不优的那个考虑下放到左右儿子区间中继续更新
查询的时候答案为经过的所有线段树的线段中最大的
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#include<map>
#define inf 2139062143
#define ll long long
#define MAXN 100100
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
while(isdigit(ch)) {x=x*+ch-'';ch=getchar();}
return x*f;
}
int n,m,mx[MAXN<<];
struct seg{double k,b;}tag[MAXN<<];
inline void build(int k,int l,int r)
{
tag[k].k=,tag[k].b=-inf;
if(l==r) return ;
int mid=(l+r)>>;
build(k<<,l,mid);build(k<<|,mid+,r);
}
inline void real_mdf(int k,int l,int r,seg x)
{
//cout<<k<<" "<<l<<" "<<r<<" "<<x.k<<" "<<x.b<<endl;
if(l==r) {if(tag[k].k*l+tag[k].b<x.k*l+x.b) tag[k]=x;return ;}
int mid=(l+r)>>;
if(tag[k].k*mid+tag[k].b<x.k*mid+x.b) swap(tag[k],x);
//cout<<"i: "<<k<<" "<<l<<" "<<r<<" "<<x.k<<" "<<x.b<<endl;
if(tag[k].k*l+tag[k].b<x.k*l+x.b) real_mdf(k<<,l,mid,x);
if(tag[k].k*r+tag[k].b<x.k*r+x.b) real_mdf(k<<|,mid+,r,x);
}
inline void mdf(int k,int l,int r,int a,int b,seg x)
{
if(a>b) return ;
//cout<<k<<" "<<l<<" "<<r<<" "<<a<<" "<<b<<" "<<x.k<<" "<<x.b<<endl;
if(l==a&&r==b) {real_mdf(k,l,r,x);return ;}
int mid=(l+r)>>;
if(b<=mid) mdf(k<<,l,mid,a,b,x);
else if(a>mid) mdf(k<<|,mid+,r,a,b,x);
else {mdf(k<<,l,mid,a,mid,x);mdf(k<<|,mid+,r,mid+,b,x);}
}
inline double query(int k,int l,int r,int x)
{
//cout<<x<<" "<<tag[k].k*x+tag[k].b<<endl;
if(l==r) return tag[k].k*x+tag[k].b;
int mid=(l+r)>>;double res;
//cout<<k<<" "<<res<<endl;
if(x<=mid) res=query(k<<,l,mid,x);
else res=query(k<<|,mid+,r,x);
return max(tag[k].k*x+tag[k].b,res);
}
int main()
{
//freopen("C2.in","r",stdin);
n=read(),m=read();int a,b,x,y,z;double k,B;
build(,,MAXN-);
for(int i=;i<=n;i++)
{
x=read(),y=read(),a=read(),b=read();
//cout<<6<<endl;
if(x==a) k=,B=max(y,b);
else k=(double)(y-b)/(x-a),B=y-k*x;
//cout<<k<<" "<<b<<endl;
mdf(,,MAXN-,max(,min(a,x)),min(MAXN-,max(x,a)),(seg){k,B});
}
while(m--)
{
z=read();
if(z) {a=read(),k=query(,,MAXN-,a);printf("%.3lf\n",k<=-inf?:k);}
else
{
x=read(),y=read(),a=read(),b=read();
//cout<<6<<endl;
if(x==a) k=,B=max(y,b);
else k=(double)(y-b)/(x-a),B=y-k*x;
//cout<<k<<" "<<b<<endl;
mdf(,,MAXN-,max(,min(a,x)),min(MAXN-,max(x,a)),(seg){k,B});
}
//system("pause");
}
}
loj 6034 线段游戏的更多相关文章
- #6034. 「雅礼集训 2017 Day2」线段游戏 李超树
#6034. 「雅礼集训 2017 Day2」线段游戏 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统 ...
- 【loj6034】「雅礼集训 2017 Day2」线段游戏
#6034. 「雅礼集训 2017 Day2」线段游戏 内存限制:256 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:Special Judge 上传者: 匿名 题目描述 ...
- BZOJ4881: [Lydsy1705月赛]线段游戏(二分图)
4881: [Lydsy1705月赛]线段游戏 Time Limit: 3 Sec Memory Limit: 256 MBSubmit: 359 Solved: 205[Submit][Stat ...
- bzoj 4879 失控的数位板 4881 线段游戏 贪心,瞎搞
[Lydsy1705月赛]失控的数位板 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 148 Solved: 33[Submit][Status][ ...
- BZOJ 4881: [Lydsy2017年5月月赛]线段游戏
4881: [Lydsy2017年5月月赛]线段游戏 Time Limit: 3 Sec Memory Limit: 256 MBSubmit: 164 Solved: 81[Submit][St ...
- loj#6034 「雅礼集训 2017 Day2」线段游戏
分析 区间李超树板子题 代码 #include<bits/stdc++.h> using namespace std; #define db double const int inf = ...
- [bzoj4881][Lydsy2017年5月月赛]线段游戏
来自FallDream的博客,未经允许,请勿转载,谢谢. quailty和tangjz正在玩一个关于线段的游戏.在平面上有n条线段,编号依次为1到n.其中第i条线段的两端点坐标分别为(0,i)和(1, ...
- 【BZOJ4881】5月月赛D 线段游戏 树状数组+set
Description quailty和tangjz正在玩一个关于线段的游戏.在平面上有n条线段,编号依次为1到n.其中第i条线段的两端点坐 标分别为(0,i)和(1,p_i),其中p_1,p_2,. ...
- 【bzoj4881】[Lydsy2017年5月月赛]线段游戏 树状数组+STL-set
题目描述 quailty和tangjz正在玩一个关于线段的游戏.在平面上有n条线段,编号依次为1到n.其中第i条线段的两端点坐标分别为(0,i)和(1,p_i),其中p_1,p_2,...,p_n构成 ...
随机推荐
- Linux忘记root密码,密码找回,图片展示
忘记root密码 CentOS 7参考地址如下:https://www.baidu.com/s?wd=CentOS7+%E6%89%BE%E5%9B%9Eroot%E5%AF%86%E7%A0%81& ...
- LeetCode(55)Jump Game
题目 Given an array of non-negative integers, you are initially positioned at the first index of the a ...
- [bzoj2005][Noi2010][能量采集] (容斥 or 欧拉函数)
Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后, 栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种 ...
- 《C语言程序设计(第四版)》阅读心得(二)
第六章引用数组处理批量数据 1.数组的定义 :类型符 数组名[常量表达式] 1) 在主函数中定义数组,常量表达式不能包含变量 +]; //合法 int n; int a[n]; //不合法 2)在被 ...
- Installing Zabbix 3.2 in Centos 6.8 Clean Install Dependencies Errors
ZABBIX Forums > Zabbix Discussions and Feedback > Zabbix Troubleshooting and Problems > Ins ...
- UI & 原型
UI & 原型 产品原型设计与团队实时协作平台 https://www.xiaopiu.com/download https://www.xiaopiu.com/forum/posts/5b9 ...
- WebLoad 脚本的用法
WebLoad 对于模拟一个HTTP 请求,一般都是 由以下三部分组成,并把这三部分包在一个Transaction里(从BeginTransation 到 EndTransaction 为止): ...
- UVALive 6430 (水dp)
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- node框架express里面静态文件中间件express.static,根据路径名查找文件
- 是express框架下的一个方法,可以根据请求路径名查找某个文件下文件名字和路径名相同的文件 - 3.X里面有20多个中间件,但是在4.X里面 只保留了express.static - 语法 ex ...
- ajax异步获取数据后动态向表格中添加数据(行)
因为某些原因,项目中突然需要做自己做个ajax异步获取数据后动态向表格中添加数据的页面,网上找了半天都没有 看到现成的,决定自己写个例子 1.HTML页面 <!doctype html> ...