BZOJ2957 楼房重建
来源:互联网 发布:淘宝网连衣裙夏装 编辑:程序博客网 时间:2024/06/08 03:04
BZOJ2957 楼房重建
题目大意
给定二维平面中的垂直于
思路
线段树维护
记
对于当前修改的线段,其左边的原先保存的答案依然可行
对于其右边的线段,划分成左右子区间,如果左子区间的最大斜率比更新值要小,直接统计右端点答案,否则统计左子区间的答案,再加上右子区间的答案,注意右子区间的答案为
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef long long LL;const int MAXN = 100000+10;double sum[MAXN<<2];LL cnt[MAXN<<2],n,m,x,y;LL calc(int rt,int l,int r,double h){ if(l==r) return sum[rt]>h; int mid=(l+r)>>1; if(sum[rt<<1]<=h) return calc(rt<<1|1,mid+1,r,h); return calc(rt<<1,l,mid,rt)+cnt[rt]-cnt[rt<<1];}void updata(double val,int x,int l,int r,int rt){ if(l==r) { sum[rt]=val; cnt[rt]=1; return ; } int mid=(l+r)>>1; if(x<=mid) updata(val,x,l,mid,rt<<1); else updata(val,x,mid+1,r,rt<<1|1); sum[rt]=max(sum[rt<<1],sum[rt<<1|1]); cnt[rt]=cnt[rt<<1]+calc(rt<<1|1,mid+1,r,sum[rt<<1]);}int main(){ scanf("%lld%lld",&n,&m); for(int i=1;i<=m;i++) { scanf("%lld%lld",&x,&y); updata( (double)y/x,x,1,n,1 ); printf("%lld\n",cnt[1]); } return 0;}
0 0
- 【BZOJ2957】楼房重建
- bzoj2957: 楼房重建
- bzoj2957 楼房重建
- BZOJ2957 楼房重建
- 【Bzoj2957】楼房重建
- BZOJ2957 楼房重建
- BZOJ2957 楼房重建
- bzoj2957 楼房重建
- bzoj2957 楼房重建
- bzoj2957: 楼房重建
- BZOJ2957: 楼房重建
- [BZOJ2957] 楼房重建 分块
- [题解]bzoj2957 楼房重建
- 【bzoj2957】楼房重建
- BZOJ2957 楼房重建
- BZOJ2957 楼房重建
- [bzoj2957]楼房重建 线段树
- bzoj2957 楼房重建 线段树
- 局域网内如何实现远程桌面控制
- Lua面向对象详解
- 南阳ACM 题目92 图像有用区域
- redis安装配置
- E-养兔子
- BZOJ2957 楼房重建
- C++ 面向对象与面向过程
- ecshop二次开发_Logo和版权信息
- 异常:unknow entity
- JDBC中的事务的概念
- Moore's voting algorithm
- Java中对象交换的问题
- [leetcode]Kth Smallest Element in an Array
- 中国牛市