2019.02.11 bzoj1568: [JSOI2008]Blue Mary开公司(线段树)
传送门
题意简述:维护整体加一条线段,求单点极值。
思路:
直接上李超线段树维护即可。
代码:
#include<bits/stdc++.h>
#define ri register int
using namespace std;
typedef long long ll;
typedef double db;
const int N=1e5+5;
const db eps=1e-7;
struct Line{db k,b;}a[N];
inline bool check(const int&x,const int&y,const int&l){
db t1=a[x].k*l+a[x].b,t2=a[y].k*l+a[y].b;
return t1<t2;
}
namespace SGT{
#define lc (p<<1)
#define rc (p<<1|1)
#define mid (l+r>>1)
int id[N<<2];
inline void update(int p,int l,int r,int k){
if(!id[p])id[p]=k;
int l1=id[p],l2=k;
if(check(l1,l2,l))swap(l1,l2);
id[p]=l1;
if(l==r||fabs(a[l1].k-a[l2].k)<eps)return;
db x=(a[l1].b-a[l2].b)/(a[l2].k-a[l1].k);
if(x<l||x>r)return;
if(x<=mid)return id[p]=l2,update(lc,l,mid,l1);
return update(rc,mid+1,r,l2);
}
inline int query(int p,int l,int r,int k){
int val=id[p]?(int)(a[id[p]].k*k+a[id[p]].b)/100:0;
if(l==r)return val;
return max(val,k<=mid?query(lc,l,mid,k):query(rc,mid+1,r,k));
}
}
inline int read(){
int ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans;
}
int main(){
char s[8];
for(ri x,tot=0,n=read(),tt=1;tt<=n;++tt){
scanf("%s",s);
if(s[0]=='Q')cout<<SGT::query(1,1,n,read())<<'\n';
else{
double x,y;
scanf("%lf%lf",&x,&y);
a[++tot]=(Line){y,x-y};
SGT::update(1,1,n,tot);
}
}
return 0;
}
2019.02.11 bzoj1568: [JSOI2008]Blue Mary开公司(线段树)的更多相关文章
- 【BZOJ1568】[JSOI2008]Blue Mary开公司 线段树
[BZOJ1568][JSOI2008]Blue Mary开公司 Description Input 第一行 :一个整数N ,表示方案和询问的总数. 接下来N行,每行开头一个单词“Query”或“P ...
- bzoj千题计划219:bzoj1568: [JSOI2008]Blue Mary开公司
http://www.lydsy.com/JudgeOnline/problem.php?id=1568 写多了就觉着水了... #include<cstdio> #include< ...
- BZOJ1568: [JSOI2008]Blue Mary开公司【李超树】
Description Input 第一行 :一个整数N ,表示方案和询问的总数. 接下来N行,每行开头一个单词"Query"或"Project". 若单词为Q ...
- BZOJ1568: [JSOI2008]Blue Mary开公司
可以平衡树或线段树维护斜率来做. 还有一种线段树直接打标记的做法: 线段树每个节点存一条线段作为标记,打标记时如果已有标记,则把占优区间小的那个线段下放. #include<cstdio> ...
- [bzoj1568][JSOI2008]Blue Mary开公司——李超线段树
题目大意 题解 这道题需要用到一种叫做李超线段树的东西.我对于李超线段树,是这样理解的: 给节点打下的标记不进行下传,而是仅仅在需要的时候进行下传,这就是所谓永久化标记. 对于这道题,借用一张图, 这 ...
- P4254 [JSOI2008]Blue Mary开公司 (李超树)
题意:插入一些一次函数线段 每次询问在x = x0处这些线段的最大值 题解:李超树模版题 维护优势线段 注意这题的输入是x=1时的b #include <iostream> #includ ...
- 【BZOJ1568】[JSOI2008]Blue Mary开公司(李超线段树)
[BZOJ1568][JSOI2008]Blue Mary开公司(李超线段树) 题面 BZOJ 洛谷 题解 是模板题啊. #include<iostream> #include<cs ...
- 【BZOJ-1568】Blue Mary开公司 李超线段树 (标记永久化)
1568: [JSOI2008]Blue Mary开公司 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 557 Solved: 192[Submit ...
- 数据结构(线段树):BZOJ 1568 [JSOI2008]Blue Mary开公司
1568: [JSOI2008]Blue Mary开公司 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 602 Solved: 214[Submit ...
随机推荐
- python网页爬虫开发之六-Selenium使用
chromedriver禁用图片,禁用js,切换UA selenium 模拟chrome浏览器,此时就是一个真实的浏览器,一个浏览器该加载的该渲染的它都加载都渲染,所以爬取网页的速度很慢.如果可以不加 ...
- SQLServer数据库镜像配置
目录 一.目标...2 二.前提条件.限制和建议...2 三.设置概述...2 四.安装Sql Server 2008 enterprise X64.3 4.1.安装.NET3.5.3 4.2.安装时 ...
- markdown工具对比: 作业部落 vs Typora
2者都挺优秀的,但是在具体使用时还是遇到一些问题: 功能 作业部落 Typora 图片调整大小 × √ 在线同步,易于分享 √ × pdf对emoji的支持 × √ pdf的text view: Vi ...
- GIL计算python 2 和 python 3 计算密集型
首先我画了一张图来表示GIL运行的方式: Python 3执行如下计算代码:#-*-conding:utf-8-*-import threading import timedef add(): n = ...
- Django01-Django基础
一.什么是web框架? 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统.对于所有的Web应用,本质上其实就是一个socket服 ...
- 如何配置IIS使其支持APK文件的下载
在管理工具里打开Internet 信息服务(IIS)管理器.然后选择需要配置的网站. 右侧的界面中会显示该网站的所有功能配置,我们选择并点击进入“MIME类型” 在左侧的操作区选择点击“添加”MIME ...
- codeforces 1041A Heist
electronic a.电子的 heist v.抢劫 in ascending order 升序 indice n.标记 device n.装置设备 staff n.职员 in arbitrary ...
- mybatis sql参考
参考mybatis sql: <select id="xxx" resultType="com.xxxx.xxx.vo.xx.xx" parameterT ...
- 使用openpyxl复制整张sheet
通过无能的baidu逛了一圈,发现有两三段能用的代码,不过参考之下,发现还有不足的: 不能拷贝有合并格式的sheet.没有拷贝cell的相关格式(填充.边框.对齐)等参数 所以通过bing继续发掘,最 ...
- JAVA四则运算(读写文件)
完成时间:17:10 package 四则运算试题; import java.io.BufferedReader; import java.io.PrintStream; import java.ut ...