浅谈标记永久化:https://www.cnblogs.com/AKMer/p/10137227.html

题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1568

什么是李超线段树?李超线段树就是用标记永久化维护平面内线段覆盖的线段树。

对于这个题,对于每个区间,我们可以存下来在这个区间的中点\(y\)值最大的直线。

对于添加一条线段,我们在线段树上对其进行递归替换原有标记:

如果当前线段的斜率大于当前区间标记线段的斜率:

如果在中点当前线段更大,由于斜率更大,说明在中点及中点以后的部分中,当前线段会比标记线段更优,我们先用标记线段去替换更新中点以前的部分,再把当前线段变成当前区间的标记线段。

否则,递归用当前线段去替换更新中点以后的区间。

如果当前线段的斜率小于当前区间标记线段的斜率:

如果在中点当前线段更大,由于斜率更小,说明在中点及中点以前的部分中,当前线段会比标记线段更优,我们先用标记线段去替换更新中点以后的部分,再把当前线段变成当前区间的标记线段。

否则,递归用当前线段去替换更新中点以前的区间。

对于询问,就拿一个一个区间标记的直线算算取最大值就行了。

时间复杂度:\(O(NlogT)\)

空间复杂度:\(O(T)\)

代码如下:

#include <cstdio>
#include <algorithm>
using namespace std; const int maxn=5e4+5; int n,tot;
char s[10];
double b[maxn<<1],k[maxn<<1]; int read() {
int x=0,f=1;char ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
return x*f;
} inline double calc(int id,int x) {
return b[id]+k[id]*(x-1);
} struct segment_tree {
int tag[maxn<<2]; void change(int p,int l,int r,int id) {
if(l==r) {
if(calc(id,l)>calc(tag[p],l))tag[p]=id;
return;
}
int mid=(l+r)>>1;
if(k[id]>k[tag[p]]) {
if(calc(id,mid)>calc(tag[p],mid))change(p<<1,l,mid,tag[p]),tag[p]=id;
else change(p<<1|1,mid+1,r,id);
}
else {
if(calc(id,mid)>calc(tag[p],mid))change(p<<1|1,mid+1,r,tag[p]),tag[p]=id;
else change(p<<1,l,mid,id);
}
} double query(int p,int l,int r,int pos) {
if(l==r)return calc(tag[p],l);
int mid=(l+r)>>1;double ans=calc(tag[p],pos);
if(pos<=mid)ans=max(ans,query(p<<1,l,mid,pos));
else ans=max(ans,query(p<<1|1,mid+1,r,pos));
return ans;
}
}T; int main() {
n=read();
for(int i=1;i<=n;i++) {
scanf("%s",s+1);
if(s[1]=='Q') {
int pos=read();
double ans=T.query(1,1,5e4,pos);
printf("%d\n",(int)(ans/100));
}
else {
tot++;
scanf("%lf%lf",b+tot,k+tot);
T.change(1,1,5e4,tot);
}
}
return 0;
}

BZOJ1568:[JSOI2008]Blue Mary开公司的更多相关文章

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

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

  2. BZOJ1568: [JSOI2008]Blue Mary开公司【李超树】

    Description Input 第一行 :一个整数N ,表示方案和询问的总数. 接下来N行,每行开头一个单词"Query"或"Project". 若单词为Q ...

  3. BZOJ1568: [JSOI2008]Blue Mary开公司

    可以平衡树或线段树维护斜率来做. 还有一种线段树直接打标记的做法: 线段树每个节点存一条线段作为标记,打标记时如果已有标记,则把占优区间小的那个线段下放. #include<cstdio> ...

  4. 2019.02.11 bzoj1568: [JSOI2008]Blue Mary开公司(线段树)

    传送门 题意简述:维护整体加一条线段,求单点极值. 思路: 直接上李超线段树维护即可. 代码: #include<bits/stdc++.h> #define ri register in ...

  5. [bzoj1568][JSOI2008]Blue Mary开公司——李超线段树

    题目大意 题解 这道题需要用到一种叫做李超线段树的东西.我对于李超线段树,是这样理解的: 给节点打下的标记不进行下传,而是仅仅在需要的时候进行下传,这就是所谓永久化标记. 对于这道题,借用一张图, 这 ...

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

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

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

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

  8. 【BZOJ-1568】Blue Mary开公司 李超线段树 (标记永久化)

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

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

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

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

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

随机推荐

  1. HandlerMethodArgumentResolver 参数解析器

    关于springMvc中的参数解析器 springMvc中的HandlerAdapter会检测所有的 HandlerMethodArgumentResolver(对参数的解析器) HandlerMet ...

  2. linearLayout 和 relativeLayout的属性区别

    LinearLayout和RelativeLayout 共有属性: java代码中通过btn1关联次控件 android:id="@+id/btn1" 控件宽度 android:l ...

  3. 【Linux】 awk应用

    1  统计机器上处于不同状态的所有TCP连接的个数(TCP连接是有状态连接,包含SYN_RECV, ESTABLISHED, TIME_WAIT, FIN_WAIT0, FIN_WAIT1等多种状态, ...

  4. HDFS源码分析之数据块Block、副本Replica

    我们知道,HDFS中的文件是由数据块Block组成的,并且为了提高容错性,每个数据块Block都会在不同数据节点DataNode上有若干副本Replica.那么,什么是Block?什么又是Replic ...

  5. Android-自定义广播不能用的可能的原因(sendbroadcast 不起效果)

    参考博客:https://blog.csdn.net/chuyouyinghe/article/details/79424373 照着书上的源码将程序原封不动敲了一遍,但发现这特么怎么也收不到发出的广 ...

  6. @Bean 和@ Component的区别

    @Component auto detects and configures the beans using classpath scanning whereas @Bean explicitly d ...

  7. Devexpress Spreadsheet 中文教程

    http://blog.csdn.net/hotmee/article/details/50554381

  8. 小程序WePY入门(一)

    全局安装或更新WePY命令行工具 npm install wepy-cli -g 在开发目录中生成Demo开发项目 wepy new myproject 切换至项目目录 cd myproject 开启 ...

  9. iOS与H5交互及UIWebView缓存

    iOS原生App与H5页面交互笔记 最近在做一个项目用到了原生App与H5交互,之前有做过简单的H5页面直接调用原生方法的例子,就是利用UIWebView中的代理方法 //webview每次加载之前都 ...

  10. Neural Task Programming: Learning to Generalize Across Hierarchical Tasks

    Neural Task Programming: Learning to Generalize Across Hierarchical Tasks