题意:

数轴上有n个楼,分别在1~n这些点上;

m次查询。每次改变一个楼的高度,问从(0,0)这个点能够看到多少楼;

题解:
对于一个楼来说要想看到这个楼。那么前面的楼的斜率一定比这个楼小;

那么考虑分块的话。就将块中楼的斜率都求出来。

然后维护出一个从块首元素開始的递增序列;

即包含块首元素的下标最小的序列;

扫一遍全部块。取该块之前的全部楼的最大斜率为ma;

在当前块中二分找比ma大的元素个数。并更新ma。

复杂度O(m*√n*log(√n)),时间基本和1s擦边;

可是BZ算的总时限全部能够无压力AC。

代码:

#include<math.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define N 110001
using namespace std;
int bk, h[N], cnt[400];
double k[N], q[400][400];
int main()
{int n, m, i, j, index, x, y, ans;double ma;scanf("%d%d", &n, &m);bk = sqrt(n);for (i = 1; i <= m; i++){scanf("%d%d", &x, &y);h[x] = y;k[x] = (double)y / x;index = x / bk;for (j = index*bk, ma = 0, cnt[index] = 0; j <= index*bk + bk - 1; j++)if (k[j] > ma)q[index][++cnt[index]] = k[j], ma = k[j];ma = 0, ans = 0;for (j = 0; j <= n / bk; j++){ans += cnt[j] - (upper_bound(q[j] + 1, q[j] + 1 + cnt[j], ma) - q[j] - 1);ma = max(ma, q[j][cnt[j]]);}printf("%d\n", ans);}return 0;
}

转载于:https://www.cnblogs.com/zfyouxi/p/5390140.html

bzoj-2957 楼房重建相关推荐

  1. BZOJ 2957楼房重建

    传送门 线段树 //Twenty #include<cstdio> #include<cstdlib> #include<iostream> #include< ...

  2. bzoj 2957: 楼房重建(线段树+递归)

    2957: 楼房重建 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 2778  Solved: 1314 [Submit][Status][Disc ...

  3. 【BZOJ—2957楼房重建】【连载:请在T台上微笑】

    长久没有发博文了...对对对, 所以最近就趁着暑假多发发吧 颓废是革命的本钱: 推荐一个我喜欢的新连载漫画吧[请在T台上微笑] BZOJ 2957 [楼房重建] Description 小A的楼房外有 ...

  4. [BZOJ 2957]楼房重建(THU2013集训)(线段树维护单调栈)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2957 分析: 根据题意,就是比较斜率大小 只看一段区间的话,那么这段区间能看见的楼房数量就是这 ...

  5. BZOJ 2957: 楼房重建

    Description 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些 ...

  6. [BZOJ 2957]楼房重建(线段树)

    Description 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些 ...

  7. bzoj 2957 楼房重建

    http://www.elijahqi.win/archives/3479 Description 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经 ...

  8. BZOJ 2957 楼房重建-线段树

    这个题最主要的是解决一个统计答案的问题. 首先我们注意到,只要考虑右区间的答案统计就好了. 记左区间的最大值为K,当前右区间为P. 我们把当前右区间又分成两个子区间,s1,s2. 那么如果s1的最大值 ...

  9. BZOJ 2957 楼房重建 (分块)

    题解:分块,然后暴力维护每一块上升序列,注意是不是最长上升序列,二分查找第二块中大于第一块的最后一个上升序列中的数. 注意:每一块的大小不要用√n会T掉的,把块的大小设为500-600都可以(T了一页 ...

  10. 2957: 楼房重建

    2957: 楼房重建 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 1579  Solved: 754 [Submit][Status][Discu ...

最新文章

  1. OpenGL multiple lights多光源的实例
  2. torch.nn.functional.pad(input, pad, mode=‘constant‘, value=0)
  3. JAVA中文支持指南(Vera Yuanti)
  4. 阿里巴巴对Java编程【安全规约】的规约
  5. AVR单片机计算器C语言源程序,AVR单片机简单计算器的Proteus仿真实现+源码
  6. Flash Player版本相关问题
  7. WebLogic配置JNDI数据源
  8. 树莓派之安装dlna服务
  9. java string与byte互转
  10. 图形验证码知识点整理 Object.prototype.toString.call()等
  11. DSP初识-20151111
  12. [RK3568 Android11] 教程之制作和替换android开机logo图片
  13. There‘s no Qt version assigned to project xxx.vcxproj for configuration Debug/x64
  14. 达达php源码,达达房卡麻将二次开发VIP系统学习课程
  15. Default encoder for format image2 (codec png) is probably disabled. Please choose an encoder manuall
  16. 小米5 原生android 7.0,发烧米粉看过来!小米5官方版Android 7.0来袭
  17. 菜鸟网络与顺丰达成和解 确保数据安全进行合作
  18. 中标麒麟操作系统,yum安装软件时提示:“已加载插件:langpacks,无须任何处理“的解决办法
  19. c语言图像压缩编码,基于C语言的图像压缩算法
  20. C++学习笔记与回顾(构造函数、链表等)

热门文章

  1. webService学习9:jquery ajax调用webservice
  2. JUnit+EclEmma进行覆盖测试
  3. mmap映射区和shm共享内存的区别总结
  4. 18-switch语句
  5. 数据结构之希尔排序------java实现
  6. 学习python、数据结构等很多的博客
  7. apche commons项目简介
  8. 阿里妈妈搜索广告CTR模型的“瘦身”之路
  9. Java序列化接口Serializable接口的作用总结
  10. 从FM推演各深度学习CTR预估模型