题意:http://www.lydsy.com/JudgeOnline/problem.php?id=2957

sol  :首先考虑转化问题,即给你一个斜率序列,让你动态维护单调栈

   考虑线段树,令get(x,r)表示以r为初值在节点x时会增加多少个数

   递归处理,get(x,r)=get(lson[x],r)+get(rson[x],max(mx[lson[x]],r))

   然而这样复杂度是爆炸的.....考虑预处理get(rson[x],mx[lson[x]])

   这样的话每次查询答案分为以下情况

     mx[lson[x]]>=r,这样的话右边已经预处理好了,递归左边即可

     mx[lson[x]]<r,这样的话左边的贡献为0,递归右边即可

   那么我们只需维护get(rson[x],mx[lson[x]])即可

   对于每次将位置pos修改为val,仅会对其右侧产生影响,分为以下情况

     若val<=mx[lson[x]],则对get(rson[x],mx[lson[x]])无影响

     若val>mx[lson[x]],那么递归进右边处理

   最终复杂度O(n*log^2)

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
const int Mx=;
int n,m,l[Mx],r[Mx],lson[Mx],rson[Mx],ans[Mx];
double maxn[Mx]; void build(int x,int L,int R)
{
l[x]=L,r[x]=R;lson[x]=x*,rson[x]=x*+;
if(L==R) return ;
int mid=(L+R)/;
build(lson[x],L,mid);
build(rson[x],mid+,R);
} int cal(int x,double val)
{
int L=l[x],R=r[x];
if(L==R) return maxn[x]>val;
if(maxn[lson[x]]<=val) return cal(rson[x],val);
return ans[x]-ans[lson[x]]+cal(lson[x],val);
} void change(int x,int pos,double c)
{
int L=l[x],R=r[x],mid=(L+R)/;
if(L==R) { ans[x]=,maxn[x]=c; return ; }
if(pos<=mid) change(lson[x],pos,c);
else change(rson[x],pos,c);
maxn[x]=max(maxn[lson[x]],maxn[rson[x]]);
ans[x]=ans[lson[x]]+cal(rson[x],maxn[lson[x]]);
} int main()
{
scanf("%d%d",&n,&m);
build(,,n);
for(int i=,x,y;i<=m;i++)
{
scanf("%d%d",&x,&y);
change(,x,(double) y/x);
printf("%d\n",ans[]);
}
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}{ ...

  10. bzoj2957楼房重建

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2957 线段树.每个点记录斜率,要一个单增的序列长度(从1开始). 线段树每个点记录自己区间的 ...

随机推荐

  1. a链接打开另外的新页面

    在a标签添加target = "_blank" 属性即可

  2. 基于LNMP环境的ssh2扩展

    openssl: 加密算法集合,C语言实现 libssh2:ssh2协议库库,C语言实现 PECL/ssh2: libssh2的php扩展,允许php程序调用libssh2中的函数 依赖关系:PECL ...

  3. (二)活用ComponentScan

    项目改造成spring cloud项目后,有非常多组件是复用的,比如(一)敏感信息混淆的组件,比如数据库.Redis等配置, 比如常用的api组件Swagger配置.每个微服务组件里都会有若干个组件随 ...

  4. 关于移动端video标签层级问题

    这是在微信中正常页面,就是用了一个原生video标签没做任何处理.然后顶部是固定页面顶端的,这个时候向上滑动页面时,会出现下图现象 这个时候正常人都会想到z-index问题,我也是这样想的,可惜很抱歉 ...

  5. 笔记-scrapy-pipeline

    笔记-scrapy-pipeline 1.简介 scrapy抓取数据后,使用yield发送item对象至pipeline,pipeline顺序对item进行处理. 一般用于: 清洗,验证,检查数据: ...

  6. Pandas库入门

    pandas库的series类型

  7. 4 Django简介

    MVC与MTV模型 MVC Web服务器开发领域里著名的MVC模式,所谓MVC就是把Web应用分为模型(M),控制器(C)和视图(V)三层,他们之间以一种插件式的.松耦合的方式连接在一起,模型负责业务 ...

  8. AD15添加导入组件

  9. 关于requestMapping 进行url映射实现小小知识点 以及如何获取请求的url中的参数

    requstMapping 用来处理url映射  可以作用在controller类上  也可以作用在方法上 经常使用的方式  通过接收一种映射关系 @RequestMapping("/del ...

  10. nodejs基础1

    nodejs学习网站: https://github.com/alsotang/node-lessons 1.全局对象 (1)node中没有window对象,有global对象替代window对象 g ...