首页 > 其他分享 >P4198 楼房重建

P4198 楼房重建

时间:2023-01-16 22:46:53浏览次数:63  
标签:P2 P3 int 楼房 最大值 P4198 区间 重建

题目链接

P4198 楼房重建

分析

1.对于每栋楼,计算它顶点(x,y)与原点(0,0)连线的斜率((double)y/x)那么能看到的楼则为斜率大的楼。

2.第一栋楼一定能被看见,那么问题就转化成了求从序列的第一项开始,后面每一项都选比前一项大的,能选则选,这样一个序列的长度

3.考虑用一个线段树来维护能看见的楼房数目

4.能看见的楼房数目->根节点的值

5.修建楼房->单点修改

6.叶子节点的最大值为该点的斜率,长度为1

7.如何合并呢?

 

 

对于每个区间(P)它的左区间(P1)一定会被计算进去

那么右区间(P2)呢?

再维护区间的最大值

若右区间(P2)的左区间(P3)的最大值小于或等于左区间(P1)的最大值,那么P3一定不会被计算进去

所以递归进右区间(P2)的右区间(P4)进行计算

若右区间(P2)的左区间(P3)的最大值大于左区间(P1)的最大值

P3无法考虑,则递归进P3

P4对答案的贡献不能取P4的值,因为无法保证序列从第一项开始,它对答案的贡献应为 P2的值减P4的值

 

代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 int n,m;
 5 
 6 double tan(int x,int y){
 7     return y*1.0/x;
 8 }
 9 
10 int ans[100005*4];
11 double ma[100005*4];
12 
13 int query(int p,int l,int r,double maxn){
14     if(ma[p]<=maxn) return 0;
15     int m=(l+r)>>1;
16     if(l==r) return 1;
17     else if(ma[p*2]<=maxn) return query(p*2+1,m+1,r,maxn);
18     return query(p*2,l,m,maxn)+ans[p]-ans[p*2];
19 }
20 
21 
22 void change(int p,int l,int r,int pc,double v){
23     if(l==pc&&r==pc){
24         ans[p]=1;
25         ma[p]=v;
26         return;
27     }
28     int m=(l+r)>>1;
29     if(pc<=m) change(p*2,l,m,pc,v);
30     else change(p*2+1,m+1,r,pc,v);
31     ma[p]=max(ma[p*2],ma[p*2+1]);
32     ans[p]=ans[p*2]+query(p*2+1,m+1,r,ma[p*2]);
33 }
34 
35 
36 int main(){
37     scanf("%d %d", &n, &m);
38     for(int i=1;i<=m;i++){
39         int x,y;
40         scanf("%d %d", &x, &y);
41         double a=tan(x,y);
42         change(1,1,n,x,a);
43         cout<<ans[1]<<endl;
44     }
45     return 0;
46 }

 

标签:P2,P3,int,楼房,最大值,P4198,区间,重建
From: https://www.cnblogs.com/Idtwtei/p/17056467.html

相关文章

  • 基于边缘辅助极线Transformer的多视角场景重建
    童伟,张苗苗,李东方,吴奇,宋爱国.基于边缘辅助极线Transformer的多视角场景重建[J].电子与信息学报编辑:一点人工一点智能原文:​​基于边缘辅助极线Transformer的多视......
  • 内存的逻辑模型是楼房
    虽然内存的实体是内存IC,不过从程序员的角度来看,也可以把它假想成每层都存储着数据的楼房,并不需要过多地关注内存IC的电源和控制信号等。因此,之后的讲解中我们也同样会使用......
  • 【题解】P4292 [WC2010]重建计划
    【乐正绫AI】世末歌者「Cotton」绫绫,有你AI的每一天,我都很幸福[大笑][大笑][大笑]【乐正绫AI】世末歌者【砖厂浪人&TsingClouds】绫绫,有你的每一天,我都很幸福[大笑][大......
  • P4198 楼房重建题解
    一道经典的线段树二分应用题目转化:把每个点换成斜率,此时发现,一个点能够被看见,当且仅当他本身就是前缀最大值用线段树维护单点修改,区间询问前缀最大值数量解题思路:要......
  • 重建二叉树
    题目描述思路分析在中序遍历列表中找到先序遍历列表中第一个节点,以此为界限可以将二叉树分为左右子树,可以得知左子树和右子树的长度,在先序遍历列表中划分出来。再依次拿......
  • 稠密单目SLAM,实时、稠密地重建三维场景
    以下内容来自从零开始机器人SLAM知识星球每日更新内容点击领取学习资料→机器人SLAM学习资料大礼包论文#ProbabilisticVolumetricFusionforDenseMonocularSLAM......
  • 对滤波反投影重建算法的研究以phantom图进行matlab仿真,构建滤波器,重建图像
    1.算法描述       CT重建算法大致分为解析重建算法和迭代重建算法,随着CT技术的发展,重建算法也变得多种多样,各有各的有特点。本文使用目前应用最广泛的重建算法——......
  • 对滤波反投影重建算法的研究以phantom图进行matlab仿真,构建滤波器,重建图像
    1.算法描述CT重建算法大致分为解析重建算法和迭代重建算法,随着CT技术的发展,重建算法也变得多种多样,各有各的有特点。本文使用目前应用最广泛的重建算法——滤波反投影算法(F......
  • 深度学习背景下的图像三维重建技术进展综述
    原文首发于《中国图象图形学报》作者:杨航,陈瑞,安仕鹏,魏豪,张衡原文地址:​​深度学习背景下的图像三维重建技术进展综述​​三维重建是指从单张二维图像或多张二维图像中重建出......
  • [点分治记录] P4292 [WC2010]重建计划
    题目看到需要求的柿子首先想到分数规划。也就是二分答案,然后在check里将所有边权减去$mid$,检验是否有路经权值$\ge$0。现在问题转化成求路径长度在$[l,r]$范围内的权值......