Luogu 4254 [JSOI2008]Blue Mary开公司
BZOJ 1568
学习了一波李超线段树。
这个东西专门用来维护插入一条线段和区间/单点的最大/最小值。
插入的时候讨论:
1、如果当前结点上没有线段,那么直接插入。
2、如果当前结点上的线段一定比要插入的线段优/劣,那么直接覆盖或者返回。
3、如果当前结点上的线段和要插入的线段有交点,那么把优的部分比劣的部分多的线段放在当前结点上,然后把另一条线段下放给那个交点所在的儿子递归处理。
时间复杂度$O(nlogn)$,但是有返回这个操作看上去就很快……
Code:
#include <cstdio>
#include <cstring>
using namespace std;
typedef double db;
typedef long long ll; const int N = 5e4 + ; int n = (int)5e4, qn; template <typename T>
inline void chkMax(T &x, T y) {
if(y > x) x = y;
} namespace SegT {
struct Node {
db lb, lk;
bool cov;
} s[N << ]; #define lc p << 1
#define rc p << 1 | 1
#define mid ((l + r) >> 1)
#define lb s[p].lb
#define lk s[p].lk
#define cov s[p].cov void ins(int p, int l, int r, db b, db k) {
if(!cov) {
lb = b, lk = k, cov = ;
return;
} db l1 = 1.0 * l * k + b, r1 = 1.0 * r * k + b;
db l2 = 1.0 * l * lk + lb, r2 = 1.0 * r * lk + lb; if(l1 >= l2 && r1 >= r2) {
lb = b, lk = k;
return;
}
if(l1 <= l2 && r1 <= r2) return; db x = (b - lb) / (lk - k);
if(l1 > l2) {
if(x > mid) ins(rc, mid + , r, lb, lk), lb = b, lk = k;
else ins(lc, l, mid, b, k);
} else {
/* if(x <= mid) ins(lc, l, mid, lb, lk), lb = b, lk = k;
else ins(rc, mid + 1, r, lb, lk); */
if(x > mid) ins(rc, mid + , r, b, k);
else ins(lc, l, mid, lb, lk), lb = b, lk = k;
}
} db query(int p, int l, int r, int x) {
if(l == r) return lk * x + lb;
db res = lk * x + lb;
if(x <= mid) chkMax(res, query(lc, l, mid, x));
else chkMax(res, query(rc, mid + , r, x));
return res;
} } using namespace SegT; int main() {
scanf("%d", &qn);
for(char op[]; qn--; ) {
scanf("%s", op);
if(op[] == 'P') {
db b, k;
scanf("%lf%lf", &b, &k);
b -= k;
ins(, , n, b, k);
} else {
int x; scanf("%d", &x);
db ans = query(, , n, x);
printf("%lld\n", (ll) (ans / 100.0));
}
}
return ;
}
Luogu 4254 [JSOI2008]Blue Mary开公司的更多相关文章
- [Luogu] P4254 [JSOI2008]Blue Mary开公司
题目背景 Blue Mary 最近在筹备开一家自己的网络公司.由于他缺乏经济头脑,所以先后聘请了若干个金融顾问为他设计经营方案. 题目描述 万事开头难,经营公司更是如此.开始的收益往往是很低的,不过随 ...
- 数据结构(线段树):BZOJ 1568 [JSOI2008]Blue Mary开公司
1568: [JSOI2008]Blue Mary开公司 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 602 Solved: 214[Submit ...
- bzoj千题计划219:bzoj1568: [JSOI2008]Blue Mary开公司
http://www.lydsy.com/JudgeOnline/problem.php?id=1568 写多了就觉着水了... #include<cstdio> #include< ...
- 【BZOJ1568】[JSOI2008]Blue Mary开公司(李超线段树)
[BZOJ1568][JSOI2008]Blue Mary开公司(李超线段树) 题面 BZOJ 洛谷 题解 是模板题啊. #include<iostream> #include<cs ...
- [BZOJ 1568][JSOI2008]Blue Mary开公司
[BZOJ 1568][JSOI2008]Blue Mary开公司 题意 \(n\) 次操作, 维护一个一次函数集合 \(S\). 有两种操作: 给定 \(b\) 和 \(k\), 向 \(S\) 中 ...
- 【BZOJ1568】[JSOI2008]Blue Mary开公司 线段树
[BZOJ1568][JSOI2008]Blue Mary开公司 Description Input 第一行 :一个整数N ,表示方案和询问的总数. 接下来N行,每行开头一个单词“Query”或“P ...
- 1568: [JSOI2008]Blue Mary开公司
1568: [JSOI2008]Blue Mary开公司 题目描述 传送门 题目分析 简单分析可以发现就是不停给出了\(n\)条直线,要求每次给出一条直线后求出所有直线在横坐标为\(x\)时\(y\) ...
- bzoj 1568 [JSOI2008]Blue Mary开公司 超哥线段树
[JSOI2008]Blue Mary开公司 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 1808 Solved: 639[Submit][Sta ...
- 1568: [JSOI2008]Blue Mary开公司(超哥线段树)
1568: [JSOI2008]Blue Mary开公司 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 1198 Solved: 418 Descr ...
随机推荐
- 常用DNS列表(电信、网通)
电信 DNS 列表 -- 共 32 条 (按拼音排序) 电信 A安徽 202.102.192.68 202.102.199.68 电信 A澳门 202.175.3.8 202.175.3.3 ...
- Codeforces Round #320 (Div. 1) [Bayan Thanks-Round] B. "Or" Game
题目链接:http://codeforces.com/contest/578/problem/B 题目大意:现在有n个数,你可以对其进行k此操作,每次操作可以选择其中的任意一个数对其进行乘以x的操作. ...
- delphi 线程的使用
unit untWorkThread; interface uses Windows,Classes,SysUtils; type TWorkItem=class end; TProcessWork= ...
- laravel中有条件使用where
在项目开发的过程中;有时候会有多个参数 去用在where查询中;那么这里的where语句是可能有也可能没有的 1.用原生的mysql语句来实现 private function getData($ty ...
- 使用阿里云服务器(OOS)实现图片上传
一: 页面 <%@ page language="java" contentType="text/html; charset=utf-8" pageEnc ...
- java代码求输入的三个数的最大值
package com.c2; import java.util.Random; import java.util.Scanner; //输入10个数,找出最大一个数,并打印出来. public cl ...
- org.apache.hadoop.security.AccessControlException: Permissiondenied: user=liuyingping, access=WRITE,inode="/user/root/output":root:supergroup:drwxr-xr-x
原因: 权限问题.用户liuyingping没有访问hdfs下文件的权限. 参考:HDFS客户端的权限错误:Permission denied 解决方案(推荐): 在系统的环境变量添加HADOOP_U ...
- fullCalendar动态获取数据
fullCalendar http://fullcalendar.io/docs/event_data/events_function $('#calendar').fullCalendar({ he ...
- PHP5.3.8连接Sql Server SQLSRV30
PHP5.3连接SQL Server就不能用php_mssql.dll了. 网上下载了好多都不行,因为它的版本是5.2的,不能再PHP5.3中使用. 后来听说微软专门为PHP出了自己的dll. 叫做M ...
- java成神之——java常识
java常识 简单DOS命令 java基础名词 java编译和运行流程 Eclipse常用快捷键 Eclipse相关操作 java基本数据类型 java基本数据类型转换 java常用运算符 java流 ...