P4198-楼房重建【线段树】

正题

题目链接:https://www.luogu.com.cn/problem/P4198


题目大意

nnn条线,开始时第iii条是(i,0)(i,0)(i,0)的一个点。

每次有操作把第xxx条线变成(x,0)(x,0)(x,0)(x,y)(x,y)(x,y)。然后求从(0,0)(0,0)(0,0)能看到几条线。


解题思路

把线变成斜率的话就是对于每个点求一个往后比它大的第一个点然后一直跳来做了。

线段树的话主要是合并区间的时候比较麻烦,一个暴力的想法是直接维护每个区间的序列,然后合并的时候一个在另一个上面二分,但是这样合并的复杂度是O(len)O(len)O(len)的。

发现我们需要的只是在右区间的序列上二分而已,而右区间的序列是由它线段树上的子树得到,所以我们没有必要真正的存下来维护的序列,可以直接在右边的线段树上二分。

大概的操作就是右边分出来的左右两个区间,如果左边的区间最大值要比目前的值要小,那么左边区间没有贡献,直接到右边。否则那么这样跳一定会到达左边区间的最大值,然后就是递归求右边区间的答案,这部分答案我们已经处理完了,直接累加然后递归作左区间即可。

这样时间复杂度就是O(nlog⁡2n)O(n\log^2 n)O(nlog2n)的了


code

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e5+10;
int n,m,len[N<<2];
double w[N<<2],a[N];
int PushUp(double val,int x,int L,int R){if(w[x]<=val)return 0;if(L==R)return a[L]>val;int mid=(L+R)>>1;if(w[x*2]<=val)return PushUp(val,x*2+1,mid+1,R);return len[x]-len[x*2]+PushUp(val,x*2,L,mid);
}
void Change(int x,int L,int R,int pos,double val){if(L==R){w[x]=a[L]=val;len[x]=1;return;}int mid=(L+R)>>1;if(pos<=mid)Change(x*2,L,mid,pos,val);else Change(x*2+1,mid+1,R,pos,val);w[x]=max(w[x*2],w[x*2+1]);len[x]=len[x*2]+PushUp(w[x*2],x*2+1,mid+1,R);
}
int main()
{scanf("%d%d",&n,&m);while(m--){int x,y;scanf("%d%d",&x,&y);Change(1,1,n,x,(double)y/x);printf("%d\n",len[1]);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319671.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2020牛客暑期多校训练营(第四场)

2020牛客暑期多校训练营&#xff08;第四场&#xff09; 这场属实有点难受 文章目录A Ancient DistanceB Basic Gcd Problem题目代码&#xff1a;C Count New StringD Dividing StringsE EliminateF Finding the Order题意&#xff1a;题解&#xff1a;代码&#xff1a;G Geome…

《C# 程序员的自我修养》送书活动结果公布

截止到9月28日24&#xff1a;00 &#xff0c;本次送书活动《C# 程序员的自我修养》共收到150多位同学参与回复。以下5位同学将获赠书籍一本&#xff1a;夏树、Damon、水墨清华、天天、kang以上同学请加小二微信领取赠书小二微信&#xff1a;geffzhang.NET社区新闻&#xff0c;深…

【AC自动机】单词(luogu 3966/ybtoj AC自动机-2)

正题 luogu 3966 ybtoj AC自动机-2 题目大意 给你n个单词&#xff0c;让你查询这写单词分别在这n个单词中出现过多少次 解题思路 先用AC自动机建好图&#xff0c;然后每个点的权值为1&#xff0c;然后向nx传递 代码 #include<cstdio> #include<cstring> #inclu…

AtCoder Beginner Contest 175总结

这次做了ABCE~ A - Rainy Season 懒得想直接分类讨论 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #include<string> #include<iostream> using namespace std; int main() {string s;cin>>s;int res0;if(s[0]R&&s[1]R&&a…

P5607-[Ynoi2013]无力回天NOI2017【线性基,线段树,树状数组】

正题 题目链接:https://www.luogu.com.cn/problem/P5607 题目大意 nnn个数字的序列&#xff0c;mmm次操作 区间[l,r][l,r][l,r]异或上一个值vvv询问区间[l,r][l,r][l,r]中选出一些数来异或的最大异或和 解题思路 最大异或和的话只能是线性基了&#xff0c;但是线性基的区间修…

牛客算法周周练15

牛客算法周周练15 文章目录A 数列下标B 可持久化动态图上树状数组维护01背包C 璀璨光滑D 树上求和E 算式子A 数列下标 题意很明确&#xff0c;再看看数据&#xff0c;所以我们直接两重循环&#xff0c;用数组b来记录右边第一个大的数的下标 代码&#xff1a; #include<bit…

使用 dotTrace 分析 .NET Core 代码问题

0.背景在项目开发之中&#xff0c;前期可能主要以保证任务完成为主&#xff0c;对于性能优化主要在于开发完成之后再来进行。可能在测试的时候发现部分接口的代码执行时间过长&#xff0c;但是又毫无头绪&#xff0c;这个时候你就需要性能分析工具来协助你排查问题了。常规性能…

【AC自动机】前缀匹配(ybtoj AC自动机-3)

正题 ybtoj AC自动机-3 题目大意 给你一个字符串和若干匹配串&#xff0c;问你匹配串的前缀和字符串的最大匹配 解题思路 先把所有匹配串丢进AC自动机&#xff0c;然后拿字符串去跑 每次只在当前位置存下贡献&#xff0c;然后按bfs的倒叙传递贡献&#xff0c;最后再倒着跑每…

Codeforces Global Round 10

这种大场全是神仙打架&#xff0c;向我这种菜菜就是掉分www太难了 神仙打架&#xff0c;百姓遭殃。 A - Omkar and Password 分析可以知道&#xff0c;只要数组元素不是全部相等答案就是1&#xff0c;如何数组元素全部相等答案就是n。 #define IO ios::sync_with_stdio(fals…

【每日一题】7月17日题目精讲—BOWL 碗的叠放

【每日一题】7月17日题目精讲—BOWL 碗的叠放 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 小H有n个碗需要放进橱柜&#xff0c;她希望将他们叠起来放置。你知道每个碗都…

基于Ocelot的gRpcHttp网关

什么是gRpcHttp网关通俗的讲就是将gRpc提供的服务以rest api的形式提供出去&#xff0c;不需要再单独的写一个webapi去做这件事。gRpcHttp网关好处减少不必要代码&#xff0c;减少中间层提高通讯效率。以前可能是这样用了gRpc网关后是这样gRpcHttp网关提供哪些功能可以直接加载…

CF917D-Stranger Trees【矩阵树定理,高斯消元】

正题 题目链接:https://www.luogu.com.cn/problem/CF917D 题目大意 给出nnn个点的一棵树&#xff0c;对于每个kkk求有多少个nnn个点的树满足与给出的树恰好有kkk条边重合。 解题思路 矩阵树有一个统计所有树边权和的和用法&#xff0c;就是把变量变成一个形如wx1wx1wx1的多项…

【AC自动机】屏蔽词删除(ybtoj AC自动机-4)

正题 ybtoj AC自动机-4 题目大意 有一个字符串和若干要删除的串&#xff08;不存在包含关系&#xff09;&#xff0c;每次从前往后搜&#xff0c;搜到第一个要删除的串然后删掉&#xff0c;再从0开始搜 问你最后得到的字符串 解题思路 先把所有删除串丢进AC自动机中&#x…

Codeforces Round #665 (Div. 2)

2020/8/21 晚上打完球就22:10了&#xff0c;愣是没报上名&#xff08;cf打不开&#xff0c;然后就做了一下赛后交的过了3个题 A - Distance and Axis 数学题分类讨论一下即可 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #inclu…

【每日一题】7月20日题目精讲—着色方案

来源&#xff1a;牛客网&#xff1a; 文章目录题目描述题解&#xff1a;代码&#xff1a;时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 有n个木块排成一行&#xff0c;从左…

COSCon'18 面向全宇宙招募志愿者啦!

2018 中国开源年会&#xff08;COSCon18-China Open Source Conference 2018) 志愿者招募工作今日正式启动&#xff01;我们诚挚地欢迎开源社区的朋友们及高校的同学们加入志愿工作者团队&#xff0c;与国内外众多开源项目基金会、公司、大神等齐聚一堂&#xff0c;共襄盛举。招…

CF346E-Doodle Jump【类欧】

正题 题目链接:https://www.luogu.com.cn/problem/CF346E 题目大意 给出a,n,p,ha,n,p,ha,n,p,h&#xff0c;在每个ax%p(x∈[0,n])ax\%p(x\in[0,n])ax%p(x∈[0,n])的位置有一个关键点&#xff0c;询问是否所有相邻关键点之间的距离都不超过hhh。 解题思路 没怎么写过类欧&…

【AC自动机】病毒代码(ybtoj AC自动机-5)

正题 ybtoj AC自动机-5 题目大意 给出若干段01串&#xff0c;问你是否存在一个无限的01串&#xff0c;使得串中不存在给出的01串 解题思路 可以把给出01串用AC自动机处理&#xff0c;然后对每个01串的最后一位打上标记 根据AC自动机的连边性质&#xff08;即若无该边&#…

AtCoder Beginner Contest 176总结

由于打球又鸽了一场&#xff0c;快开学了好好打球&#xff01;&#xff01;&#xff01;&#xff08;狗头 还是补一补 A - Takoyaki 签到题 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<iostream> #include<a…

讲重点,看趋势——Microsoft Ignite 2018的回顾和展望

一年一度的微软技术大会——Microsoft Ignite 2018上周在奥兰多召开&#xff0c;目前已经落下帷幕。我没有去现场&#xff0c;但据说这次的盛况空前&#xff0c;创下微软之最。确实&#xff0c;这些年来&#xff0c;微软内部非常重视 Iginte&#xff0c;上至最高管理层&#xf…