当前位置: 首页 > news >正文

BZOJ 1568: [JSOI2008]Blue Mary开公司

超哥线段树

#include<cstdio>
#include<algorithm>
using namespace std;
const int lim=50000;
double ans;
char s[15];
struct node{
	double k,b;
}Line[2000005];
inline double check(node a,node b){
	return (a.b-b.b)/(b.k-a.k);
}
inline double calc(double x,node line){
	return line.k*x+line.b;
}
inline void update(int t,node line){
	Line[t]=line;
}
inline void insert(int t,int l,int r,int x,int y,node line){
	if (l>y || r<x) return;
	if (l>=x && r<=y){
		double Lmax=calc(l,line),Rmax=calc(r,line);
		double Lt=calc(l,Line[t]),Rt=calc(r,Line[t]);
		if (Lmax<=Lt && Rmax<=Rt) return;
		else if (Lmax>Lt && Rmax>Rt) update(t,line);
		else{
			int mid=(l+r)>>1;
			double Key=check(line,Line[t]);
			node To=line;
			if (Key<=mid) {
				if (Lmax<Lt) {
					To=Line[t];
					update(t,line);
				}
				insert(t<<1,l,mid,x,y,To);
			}
			else {
				if (Rmax<Rt){
					To=Line[t];
					update(t,line);
				}
				insert(t<<1|1,mid+1,r,x,y,To);
			}
		}
		return;
	}
	int mid=(l+r)>>1;
	insert(t<<1,l,mid,x,y,line);
	insert(t<<1|1,mid+1,r,x,y,line);
}
void query(int t,int l,int r,int key){
	double Key=calc(key,Line[t]);
	if (Key>ans) ans=Key;
	if (l==r) return;
	int mid=(l+r)>>1;
	if (key<=mid) query(t<<1,l,mid,key);
	else query(t<<1|1,mid+1,r,key);
}
int main(){
	int q;
	scanf("%d",&q);
	while (q--){
		scanf("%s",s);
		if (s[0]=='Q'){
			int X;
			scanf("%d",&X);
			ans=0;
			query(1,1,lim,X);
			printf("%d\n",(int)(ans/100));
		}
		else{
			double B,K;
			scanf("%lf%lf",&B,&K);
			B-=K;
			insert(1,1,lim,1,lim,(node){K,B});
		}
	}
	return 0;
}

  

 

转载于:https://www.cnblogs.com/silenty/p/9842495.html

相关文章:

  • Ubuntu 16.04 下 安装go
  • PHP CLI应用的调试原理
  • springboot入门_email
  • Python MetaClass深入分析
  • Python中常见的字符串的操作方法:
  • 记录LNMP多主机架构Wordpress博客实施过程中的一些坑
  • 表单提交时问题总结
  • iOS:The operation couldn’t be completed. (DVTCoreSimulatorAdditionsErrorDomain error 0.)
  • python关于标识符说明
  • 类的自动加载
  • 【DP复习】背包 ovo
  • CSS3 Transform变形(3D转换)
  • Python——数据存储:XML操作
  • python 求助!
  • OpenGL step by step 38 : Skeletal Animation with Assimp
  • 「译」Node.js Streams 基础
  • 2017-08-04 前端日报
  • HTTP 简介
  • Linux链接文件
  • mysql 5.6 原生Online DDL解析
  • rabbitmq延迟消息示例
  • webpack项目中使用grunt监听文件变动自动打包编译
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 订阅Forge Viewer所有的事件
  • 和 || 运算
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 排序算法之--选择排序
  • 前嗅ForeSpider中数据浏览界面介绍
  • 强力优化Rancher k8s中国区的使用体验
  • 听说你叫Java(二)–Servlet请求
  • 移动端解决方案学习记录
  • ionic入门之数据绑定显示-1
  • PostgreSQL之连接数修改
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • #stm32驱动外设模块总结w5500模块
  • (1)Android开发优化---------UI优化
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (day 12)JavaScript学习笔记(数组3)
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (一)Neo4j下载安装以及初次使用
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)linux下的时间函数使用
  • (转载)虚函数剖析
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET 材料检测系统崩溃分析
  • .NET 服务 ServiceController
  • .Net 路由处理厉害了
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .Net程序帮助文档制作
  • .net项目IIS、VS 附加进程调试
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • ::
  • []error LNK2001: unresolved external symbol _m