P4198 楼房重建题解
一眼数据结构。
考虑线段树,记录该区间能看到最多的建筑数量
很明显,假如我现在的修改操作是
对于叶子节点,
对于其他的节点,就是左儿子的答案
很难
递归找右儿子中大于左儿子斜率的数量,不妨设我们递归到
考虑
最后的时间复杂度就是
上代码:
#include<bits/stdc++.h> #define ll long long #define db double using namespace std; const ll N=1e5+50; ll n,m,ans[N*4]; db xl[N*4]; ll query(ll wz,ll l,ll r,db x) { if(xl[wz]<=x) return 0; if(l==r) return (xl[wz]>x); ll mid=(l+r)/2; if(xl[wz*2]<=x) return query(wz*2+1,mid+1,r,x); return query(wz*2,l,mid,x)+ans[wz]-ans[wz*2]; } void change(ll wz,ll l,ll r,ll md,db x) { if(l==r) { ans[wz]=1; xl[wz]=x; return ; } ll mid=(l+r)/2; if(md<=mid) change(wz*2,l,mid,md,x); else change(wz*2+1,mid+1,r,md,x); xl[wz]=max(xl[wz*2],xl[wz*2+1]); ans[wz]=ans[wz*2]+query(wz*2+1,mid+1,r,xl[wz*2]); } int main() { scanf("%lld %lld",&n,&m); for(ll i=1,x,y;i<=m;i++) { scanf("%lld %lld",&x,&y); change(1,1,n,x,(db)y/x); printf("%lld\n",ans[1]); } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具