题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2957

线段树。每个点记录斜率,要一个单增的序列长度(从1开始)。

线段树每个点记录自己区间的max和单增长度,pushup的时候通过mx [ ls ]判断往哪个儿子递归。

需要注意的是当右儿子的长度全部可以加上是,不能加s [ rs ],因为不一定全在总的单增序列上(只有rs中大于mx[ls]的那一部分);

  所以右儿子的贡献应该是原先总区间的s减去左儿子的s,因为单增序列从最左端开始,总序列中左儿子肯定全在。

#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
const int N=1e5+;
int n,m,x,s[N<<];
double z,mx[N<<];
int dg(int cur,double lm,int l,int r)
{
if(l==r)return mx[cur]>lm;
int ls=(cur<<),rs=(cur<<|);
if(mx[ls]<=lm)return dg(rs,lm,((l+r)>>)+,r);
return dg(ls,lm,l,((l+r)>>))+s[cur]-s[ls];
}
void pushup(int bh,int l,int r)
{
int ls=(bh<<),rs=(bh<<|);
mx[bh]=mx[ls];s[bh]=s[ls];
if(mx[rs]<=mx[ls])return;
mx[bh]=mx[rs];
// printf(" ()l=%d r=%d mx=%lf\n",l,r,mx[bh]);
s[bh]+=dg(rs,mx[ls],((l+r)>>)+,r);
}
void add(int bh,int l,int r)
{
int mid=((l+r)>>);
if(l==r){
mx[bh]=z;s[bh]=;//bh,不是l
// printf("l=%d r=%d mx=%lf s=%d\n",l,r,mx[bh],s[bh]);
return;
}
if(x<=mid)add(bh<<,l,mid);
else add(bh<<|,mid+,r);
pushup(bh,l,r);
// printf("l=%d r=%d mx=%lf s=%d\n",l,r,mx[bh],s[bh]);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
scanf("%d%lf",&x,&z);z/=x;
add(,,n);
printf("%d\n",s[]);
}
return ;
}

bzoj2957楼房重建的更多相关文章

  1. BZOJ2957: 楼房重建(线段树&LIS)

    2957: 楼房重建 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 3727  Solved: 1793[Submit][Status][Discus ...

  2. Bzoj2957 楼房重建

    Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1516  Solved: 723[Submit][Status][Discuss] Descripti ...

  3. [bzoj2957][楼房重建] (线段树)

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

  4. 【数据结构】bzoj2957楼房重建

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

  5. 【分块】bzoj2957 楼房重建

    http://www.cnblogs.com/wmrv587/p/3843681.html ORZ 分块大爷.思路很神奇也很清晰. 把 块内最值 和 块内有序 两种良好的性质结合起来,非常棒地解决了这 ...

  6. 【经典问题】bzoj2957: 楼房重建

    经典问题:动态维护上升子序列长度 进阶问题:[经典问题]#176. 栈 Description 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无 ...

  7. BZOJ2957 楼房重建 【线段树】

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

  8. bzoj2957 楼房重建——线段树

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2957 线段树维护两个值:cnt 能看到的最多楼房数: mx 最大斜率数: 对于一段区间,从左 ...

  9. BZOJ2957: 楼房重建(分块)

    题意 题目链接 Sol 自己YY出了一个\(n \sqrt{n} \log n\)的辣鸡做法没想到还能过.. 可以直接对序列分块,我们记第\(i\)个位置的值为\(a[i] = \frac{H_i}{ ...

随机推荐

  1. [one day one question] 有没有免费接收短信验证用于注册的软件或者平台?

    问题描述: 想要批量注册撸羊毛,有手机短信验证码验证,这怎么破? 解决方案: 免费的肯定没有的,不过"一条短信收费一毛钱"倒是有一个,本人是亲自试用过,该平台收不到短信验证码不收费 ...

  2. pyDay13

    内容来自廖雪峰的官方网站. 1.把list.dict.str等Iterable变成Iterator可以使用iter()函数 >>> L = iter([1, 2, 3, 4, 5, ...

  3. python中模块导入问题(已解决)

    想在python中导入request包: 无此模块,于是先安装requests包: 但是提示"Requirement already satisfied".在提示的相应目录里,找到 ...

  4. 如何在命令提示符下编译运行含有Package的java文件

    这篇是大二自学Java的时候记下的笔记,中午回顾印象笔记的时候意外看到了这篇.看到多年前写下的文字,我想起那时候我对Java的懵懵懂懂,每天晚上在图书馆照着书写书上的示例代码,为一个中文分号绞尽脑汁, ...

  5. NOIP 2018退役祭

    Day 0 实在是没啥特别想干的...路上看了一下FE的小玉的第四周目的视频...然后到了之后整理了一下东西,然后被slr教着学了一下一个叫翻棋的东西,然后立刻就上瘾了...然后就听slr先生教我滑铁 ...

  6. POJ 1170 Shopping Offers(完全背包+哈希)

    http://poj.org/problem?id=1170 题意:有n种花的数量和价格,以及m种套餐买法(套餐会便宜些),问最少要花多少钱. 思路:题目是完全背包,但这道题目不好处理的是套餐的状态, ...

  7. R中的路径设置

    软件的路径设置对于电脑的内存管理和自己的寻根究底十分重要.所以,合理的设置R中相关路径,能更加方便快捷的管理自己的相关文件,提高学习R语言的效率,建立自己的习惯体系. R中的路径设置主要有以下几个方面 ...

  8. css3 导入字体

    在CSS中导入字体或是字体ICON @font-face{ src: url("具体的字体地址"), url("具体的字体地址"); }

  9. D3.js学习笔记(六)——SVG基础图形和D3.js

    目标 在这一章,我们将会重温SVG图形,学习如何使用D3.js来创建这些图形. 这里会包括前面例子中的SVG基础图形以及如何使用D3.js设置图形的属性. 使用D3.js画一个SVG 的 圆 circ ...

  10. bzoj3172: [Tjoi2013]单词 ac自动机

    某人读论文,一篇论文是由许多单词组成.但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次. Input 第一个一个整数N,表示有多少个单词,接下来N行每行一个单词.每个单词 ...