BZOJ 1568

学习了一波李超线段树。

大佬blog

这个东西专门用来维护插入一条线段和区间/单点的最大/最小值。

插入的时候讨论:

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开公司的更多相关文章

  1. [Luogu] P4254 [JSOI2008]Blue Mary开公司

    题目背景 Blue Mary 最近在筹备开一家自己的网络公司.由于他缺乏经济头脑,所以先后聘请了若干个金融顾问为他设计经营方案. 题目描述 万事开头难,经营公司更是如此.开始的收益往往是很低的,不过随 ...

  2. 数据结构(线段树):BZOJ 1568 [JSOI2008]Blue Mary开公司

    1568: [JSOI2008]Blue Mary开公司 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 602  Solved: 214[Submit ...

  3. bzoj千题计划219:bzoj1568: [JSOI2008]Blue Mary开公司

    http://www.lydsy.com/JudgeOnline/problem.php?id=1568 写多了就觉着水了... #include<cstdio> #include< ...

  4. 【BZOJ1568】[JSOI2008]Blue Mary开公司(李超线段树)

    [BZOJ1568][JSOI2008]Blue Mary开公司(李超线段树) 题面 BZOJ 洛谷 题解 是模板题啊. #include<iostream> #include<cs ...

  5. [BZOJ 1568][JSOI2008]Blue Mary开公司

    [BZOJ 1568][JSOI2008]Blue Mary开公司 题意 \(n\) 次操作, 维护一个一次函数集合 \(S\). 有两种操作: 给定 \(b\) 和 \(k\), 向 \(S\) 中 ...

  6. 【BZOJ1568】[JSOI2008]Blue Mary开公司 线段树

    [BZOJ1568][JSOI2008]Blue Mary开公司 Description Input 第一行 :一个整数N ,表示方案和询问的总数.  接下来N行,每行开头一个单词“Query”或“P ...

  7. 1568: [JSOI2008]Blue Mary开公司

    1568: [JSOI2008]Blue Mary开公司 题目描述 传送门 题目分析 简单分析可以发现就是不停给出了\(n\)条直线,要求每次给出一条直线后求出所有直线在横坐标为\(x\)时\(y\) ...

  8. bzoj 1568 [JSOI2008]Blue Mary开公司 超哥线段树

    [JSOI2008]Blue Mary开公司 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 1808  Solved: 639[Submit][Sta ...

  9. 1568: [JSOI2008]Blue Mary开公司(超哥线段树)

    1568: [JSOI2008]Blue Mary开公司 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 1198  Solved: 418 Descr ...

随机推荐

  1. js 预解析

    前言 JavaScript是解释型语言是毋庸置疑的,但它是不是仅在运行时自上往下一句一句地解析的呢? 事实上或某种现象证明并不是这样的,通过<JavaScript权威指南>及网上相关资料了 ...

  2. JavaScript 与 Java、PHP 的比较

    网站开发的实践从设计方面开始,包括客户端编程语言.大体上说,在网页设计中使用了三种语言:HTML,CSS和Java.自从网站发明以来,HTML和CSS已经成为网页设计的基础,但是Java被用于添加网站 ...

  3. fft蝶形算法的特点

  4. 关于quartus工程添加文件的说明

    quartus工程中要添加bsf文件的话需要将源文件也一同添加进来,添加ip核需要添加qip文件,时序约束文件只有添加到工程中才有效果,而timequest分析时需要制定约束文件.

  5. ACM学习历程—51NOD 1412 AVL树的种类(递推)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1770 这是这次BSG白山极客挑战赛的B题.设p(i, j)表示节点个数为 ...

  6. svn服务器端回退版本 (转)

    由于误操作,不小心将错误的代码提交到了svn上,于是想在服务器上撤销本次提交,经过尝试,发现进行以下步骤的操作即可彻底删除本次提交: 1.首先找到本次提交后生成的版本号,例如为r224. 2.登录到s ...

  7. (转)android平台下使用点九PNG技术

    “点九”是andriod平台的应用软件开发里的一种特殊的图片形式,文件扩展名为:.9.png 智能手机中有自动横屏的功能,同一幅界面会在随着手机(或平板电脑)中的方向传感器的参数不同而改变显示的方向, ...

  8. delphi xe5 安卓 配置sqlite

    本篇我们介绍一下在android手机上怎样使用sqlite数据库,这里用Navigator实现 增删改查. 1.新建firemonkey mobile application 2.选择blank ap ...

  9. laravel 中使用定时任务

    Laravel5.3 Artisan Console 文档地址 http://laravelacademy.org/post/6228.html 1.在服务器上查看定时任务有哪些crontab -e ...

  10. linux 下安装php扩展

    linux下安装php扩展 步骤: 1.在扩展解压包目录执行 phpize 2.执行 ./configure --with-php-config=/usr/local/php/bin/php-conf ...