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

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

跟这题一样:https://www.cnblogs.com/AKMer/p/10138264.html

不过需要线段完全覆盖当前区间才能递归去替换标记。

时间复杂度:\(O(nlog^2n)\)

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

代码如下:

#include <cstdio>
#include <algorithm>
using namespace std; const int maxn=1e5+5,maxlen=4e4+4,pps=39989; int n,lstans,cnt;
double b[maxn],k[maxn]; inline 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 k[id]*x+b[id];
} inline bool check(int id1,int id2,int x) {
double A=k[id1]*x+b[id1],B=k[id2]*x+b[id2];
if(A!=B)return A<B;
return id1>id2;
} struct segment_tree {
int tag[maxlen<<2]; int query(int p,int l,int r,int pos) {
if(l==r)return tag[p];
int mid=(l+r)>>1;int res;
if(pos<=mid)res=query(p<<1,l,mid,pos);
else res=query(p<<1|1,mid+1,r,pos);
if(check(tag[p],res,pos))return res;
return tag[p];
} void change_tag(int p,int l,int r,int id) {
if(l==r) {if(check(tag[p],id,l))tag[p]=id;return;}
int mid=(l+r)>>1;
if(k[id]>k[tag[p]]) {
if(check(tag[p],id,mid))change_tag(p<<1,l,mid,tag[p]),tag[p]=id;
else change_tag(p<<1|1,mid+1,r,id);
}
else {
if(check(tag[p],id,mid))change_tag(p<<1|1,mid+1,r,tag[p]),tag[p]=id;
else change_tag(p<<1,l,mid,id);
}
} void change(int p,int l,int r,int L,int R) {
if(L<=l&&r<=R) {change_tag(p,l,r,cnt);return;}
int mid=(l+r)>>1;
if(L<=mid)change(p<<1,l,mid,L,R);
if(R>mid)change(p<<1|1,mid+1,r,L,R);
}
}T; inline int fakein(int p) {
int x=read();
return (x+lstans-1)%p+1;
} inline void make(int id,int x0,int y0,int x1,int y1) {
if(x0==x1)k[id]=0,b[id]=max(y1,y0);
else {
k[id]=1.0*(y1-y0)/(x1-x0);
b[id]=1.0*y0-k[id]*x0;
}
} int main() {
n=read();
for(int i=1;i<=n;i++) {
int opt=read();
if(opt==0) {
int k=fakein(pps);
lstans=T.query(1,1,pps,k);
printf("%d\n",lstans);
}
else {
int x0=fakein(pps),y0=fakein(1e9),x1=fakein(pps),y1=fakein(1e9);
if(x0>x1)swap(x1,x0),swap(y0,y1);
make(++cnt,x0,y0,x1,y1);
T.change(1,1,pps,x0,x1);
}
}
return 0;
}

BZOJ3165:[HEOI2013]Segment的更多相关文章

  1. 【BZOJ3165】[HEOI2013]Segment(李超线段树)

    [BZOJ3165][HEOI2013]Segment(李超线段树) 题面 BZOJ 洛谷 题解 似乎还是模板题QwQ #include<iostream> #include<cst ...

  2. BZOJ3165 & 洛谷4097:[HEOI2013]Segment——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=3165 https://www.luogu.org/problemnew/show/P4097 要求 ...

  3. bzoj 3165: [Heoi2013]Segment 动态凸壳

    3165: [Heoi2013]Segment Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 202  Solved: 89[Submit][Stat ...

  4. 洛谷 P4097 [HEOI2013]Segment 解题报告

    P4097 [HEOI2013]Segment 题目描述 要求在平面直角坐标系下维护两个操作: 在平面上加入一条线段.记第 \(i\) 条被插入的线段的标号为 \(i\) 给定一个数 \(k\),询问 ...

  5. BZOJ 3165: [Heoi2013]Segment

    3165: [Heoi2013]Segment Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 465  Solved: 187[Submit][Sta ...

  6. Bzoj 3165 [Heoi2013]Segment题解

    3165: [Heoi2013]Segment Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 668  Solved: 276[Submit][Sta ...

  7. BZOJ3165[Heoi2013]Segment——李超线段树

    题目描述 要求在平面直角坐标系下维护两个操作: 1.在平面上加入一条线段.记第i条被插入的线段的标号为i. 2.给定一个数k,询问与直线 x = k相交的线段中,交点最靠上的线段的编号. 输入 第一行 ...

  8. 2019.02.11 bzoj3165: [Heoi2013]Segment(线段树)

    传送门 题意简述:要求支持两种操作: 插入一条线段. 询问与直线x=kx=kx=k相交的线段中,交点最靠上的线段的编号. 思路: 直接上李超线段树即可. 代码: #include<bits/st ...

  9. BZOJ3165 : [Heoi2013]Segment

    建立线段树,每个节点维护该区间内的最优线段. 插入线段时,在线段树上分裂成$O(\log n)$棵子树,若与当前点的最优线段不相交,那么取较优的,否则暴力递归子树. 查询时在叶子到根路径上所有点的最优 ...

随机推荐

  1. oracle中v$sga_target_advice的用途

    v$sga_target_advice:该视图可用于建议SGA大小设置是否合理.   SELECT a.sga_size,--sga期望大小          a.sga_size_factor,-- ...

  2. python学习(九)python中的变量、引用和对象的关系

    <Think In Java>中说到过"万事万物皆对象",这句话也可以用在Python中. 感觉Python中的变量有点像Javascript中的变量,是弱类型的,但是 ...

  3. IPv4地址(二)网络划分

    在IPv4地址(一)中提到过,IP地址可以分成两部分,前面一部分是网络号,而后面一部分是主机号. 这里网络可以通过主机数量规模不同而分为3类:大型网络.中型网络和小型网络. 不同网络的特点 大型网络— ...

  4. 计算机器内存数量+引入和显示ARDS成员

    [1]README 1.1) 本代码在于读取内存中多个 内存段的地址范围描述符结构体(ARDS),有多少个内存段可以用: 1.2) source code and images in the blog ...

  5. smarty静态缓存

    缓存能让程序访问起来更加快速,调数据库的数量变少,不能实时的跟数据库同步, 一般缓存文件都放在smarty文件下cach文件夹中: 建立缓存的PHP和HTML文件: 先编辑PHP文件来查询显示数据库当 ...

  6. 【BZOJ2476】战场的数目 矩阵乘法

    [BZOJ2476]战场的数目 Description Input 输入文件最多包含25组测试数据,每个数据仅包含一行,有一个整数p(1<=p<=109),表示战场的图形周长.p=0表示输 ...

  7. 九度OJ 1030:毕业bg (01背包、DP)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1814 解决:798 题目描述:     每年毕业的季节都会有大量毕业生发起狂欢,好朋友们相约吃散伙饭,网络上称为"bg" ...

  8. Error524 源站处理超时 Error 524: A timeout occurred

    https://su.baidu.com/helps/index.html#/4/5a61e4b5b34f697f13234a5b Error524 源站处理超时 更新时间:2018-01-19 20 ...

  9. 我的Android进阶之旅------>自己写个Activity来调节Android系统背光亮度Brightness

    今天终于算初步写好了一个调节系统背光亮度Brightness的代码,本来不看Android源代码以为可以直接调用某个Action来启动系统的那个调节Brightness的对话框,但是看了代码后发现系统 ...

  10. 我的Android进阶之旅------>使用ThumbnailUtils类获取视频的缩略图

    今天看了一段代码,是关于获取视频的缩略图的,让我认识了一个ThumbnailUtils类,代码如下. Bitmap bitmap = ThumbnailUtils.createVideoThumbna ...