总之就是找前面所有点的斜率都严格小于这个点的这样的点的个数

不管是询问还是修改都非常线段树啊,而且相当眼熟是不是和hotel有点像啊,大概就是区间内记一个len一个max,分别是当前区间答案和区间最大斜率,然后合并区间的时候用右区间递归,分情况讨论更新左区间

这样是两个log……

  1. #include<iostream>
  2. #include<cstdio>
  3. using namespace std;
  4. const int N=100005;
  5. int n,m;
  6. double a[N];
  7. struct qwe
  8. {
  9. int l,r,len;
  10. double mx;
  11. }t[N<<2];
  12. int read()
  13. {
  14. int r=0,f=1;
  15. char p=getchar();
  16. while(p>'9'||p<'0')
  17. {
  18. if(p=='-')
  19. f=-1;
  20. p=getchar();
  21. }
  22. while(p>='0'&&p<='9')
  23. {
  24. r=r*10+p-48;
  25. p=getchar();
  26. }
  27. return r*f;
  28. }
  29. void build(int ro,int l,int r)
  30. {
  31. t[ro].l=l,t[ro].r=r;
  32. if(l==r)
  33. return;
  34. int mid=(l+r)>>1;
  35. build(ro<<1,l,mid);
  36. build(ro<<1|1,mid+1,r);
  37. }
  38. int ques(int ro,double p)
  39. {
  40. if(t[ro].l==t[ro].r)
  41. return p<t[ro].mx;
  42. int mid=(t[ro].l+t[ro].r)>>1;
  43. if(p>=t[ro<<1].mx)
  44. return ques(ro<<1|1,p);
  45. else
  46. return t[ro].len-t[ro<<1].len+ques(ro<<1,p);
  47. }
  48. void update(int ro,double p,int w)
  49. {
  50. if(t[ro].l==t[ro].r)
  51. {
  52. t[ro].len=1,t[ro].mx=p;
  53. return;
  54. }
  55. int mid=(t[ro].l+t[ro].r)>>1;
  56. if(w<=mid)
  57. update(ro<<1,p,w);
  58. else
  59. update(ro<<1|1,p,w);
  60. t[ro].mx=max(t[ro<<1].mx,t[ro<<1|1].mx);
  61. t[ro].len=t[ro<<1].len+ques(ro<<1|1,t[ro<<1].mx);
  62. }
  63. int main()
  64. {
  65. n=read(),m=read();
  66. if(n<=2000&&m<=2000)
  67. {
  68. while(m--)
  69. {
  70. int x=read(),y=read(),ans=0;
  71. a[x]=y;
  72. double mx=0;
  73. for(int i=1;i<=n;i++)
  74. {
  75. if(i>1&&mx<=1e9)
  76. mx=i*mx/(i-1);//cerr<<mx<<" ";
  77. if(a[i]>mx)
  78. ans++;
  79. mx=max(mx,a[i]);
  80. }//cerr<<endl;
  81. printf("%d\n",ans);
  82. }
  83. return 0;
  84. }
  85. build(1,1,n);
  86. while(m--)
  87. {
  88. double x=read(),y=read();
  89. update(1,y/x,(int)x);
  90. printf("%d\n",t[1].len);
  91. }
  92. return 0;
  93. }

bzoj 2957: 楼房重建【线段树】的更多相关文章

  1. bzoj 2957: 楼房重建 线段树

    2957: 楼房重建 Time Limit: 10 Sec  Memory Limit: 256 MB[Submit][Status][Discuss] Description 小A的楼房外有一大片施 ...

  2. bzoj 2957 楼房重建 (线段树+思路)

    链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2957 思路: 用分块可以很简单的过掉,但是这道题也可以用线段树写. 分类讨论左区间最大值对 ...

  3. bzoj 2957: 楼房重建 ——线段树

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

  4. BZOJ 2957 楼房重建(线段树区间合并)

    一个显而易见的结论是,这种数字的值是单调递增的.我们修改一个数只会对这个数后面的数造成影响.考虑线段树划分出来的若干线段. 这里有两种情况: 1.某个线段中的最大值小于等于修改的数,那么这个线段的贡献 ...

  5. BZOJ 2957: 楼房重建 [线段树 信息合并]

    传送门 题意:转换成斜率然后维护区间的上升序列(从区间第一个数开始的单调上升序列) 区间保存这个区间的最长序列的长度$ls$和最大值$mx$ 如何合并两个区间信息? 左区间一定选择,右区间递归寻找第一 ...

  6. BZOJ 2957楼房重建

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

  7. [BZOJ29957] 楼房重建 - 线段树

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

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

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

  9. BZOJ 2957 楼房重建 (线段树)

    题目链接  楼房重建 解题思路:我们可以把楼房的最高点的斜率计算出来.那么问题就转化成了实时查询x的个数,满足数列x的左边没有大于等于x的数. 我们可以用线段树维护 设t[i]为如果只看这个区间,可以 ...

随机推荐

  1. win10 默认锁屏路径

    C:\Users\YourUsername\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\ ...

  2. cf 55D 数位dp 好题

    /* 刚开始我考虑0的情况,想将他剔除就将lcmn设为-1,这样还要判断0和lcmn是-1的情况很麻烦而且但是一直出错 后来觉得不用管0的情况就行了,可以认为符合. 解:将lcmn离散化,因为1-9的 ...

  3. Bzoj3038 上帝造题的七分钟2 线段树

    Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 1135  Solved: 509 Description XLk觉得<上帝造题的七分钟>不太 ...

  4. POJ 3468_A Simple Problem with Integers(树状数组)

    完全不知道该怎么用,看书稍微懂了点. 题意: 给定序列及操作,求区间和. 分析: 树状数组可以高效的求出连续一段元素之和或更新单个元素的值.但是无法高效的给某一个区间的所有元素同时加个值. 不能直接用 ...

  5. [bzoj2982]combination_卢卡斯

    Combination bzoj-2982 题目大意:求$C_n^m/%10007$. 注释:$1\le n,m\le 2\cdot 10^9$. 想法:裸卢卡斯定理. 先处理出$mod$数之内的阶乘 ...

  6. [bzoj2208][Jsoi2010]连通数_bitset_传递闭包floyd

    连通数 bzoj-2208 Jsoi-2010 题目大意:给定一个n个节点的有向图,问每个节点可以到达的点的个数和. 注释:$1\le n\le 2000$. 想法:网上有好多tarjan+拓扑序dp ...

  7. node安装-Win+Linux+Mac osx

    node下载地址,除了Mac osx或Win平台,仅有Linux平台命令安装. Win.Mac 点击即可下载(注:Mac有dmg和pkg安装格式). Linux分为Redhot和Deepin系列,安装 ...

  8. PHP数组去空项

    $strDelCodes = "A;B;;C;;C;D;;;D;D";$rsArray = array_values (array_unique (array_diff (spli ...

  9. Class 与 new的配合使用

    class Type{  // 定义新的类型Type /// ...... }; Type a;  Type b; // 像int a; int b;那样使用,  定义a和b为Type类型的变量 in ...

  10. socket listen backlog

    http://stackoverflow.com/questions/4253454/question-about-listening-and-backlog-for-sockets The list ...