题意很简单,n个桥的高度是事先给出来的,然后有m次涨水与落水的高度,问有多少座桥在这m次涨落之后 被淹超过了k次,如果某桥本身被水淹了,此时再涨水,就不能算多淹一次

看下数据10的五次方,10的五次方的硬循环是避免不了了,很明显在计算被淹次数的时候要能缩到logN的复杂度才好。

于是想到先对桥由低到高排一下序,然后获取前一次的落水值和这次的涨水值,只要桥高度在涨落直接的必定是又被淹了一次。要多次对序列的某个区间进行加操作,自然是线段树了,确定区间的时候,就用二分,在进行线段树的时候 用懒惰标记

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#define Lson (rt<<1),l,mid
#define Rson (rt<<1|1),mid+1,r
#define N 100010
using namespace std;
int n,m,k;
int d[N*3],maxk[N*3],flag[N*3],A[N];
void up(int rt)
{d[rt]=d[rt<<1]+d[rt<<1|1];maxk[rt]=maxk[rt<<1]+maxk[rt<<1|1];
}
void pushdown(int rt,int l,int r)
{if (l>=r || flag[rt]==0) return;int ll=rt<<1;int rr=rt<<1|1;int mid=(l+r)>>1;d[ll]+=flag[rt];d[rr]+=flag[rt];flag[ll]+=flag[rt];flag[rr]+=flag[rt];flag[rt]=0;if (mid-l+1==1 && d[ll]>=k)maxk[ll]=1;if (r-mid==1 && d[rr]>=k)maxk[rr]=1;// up(rt);
}
void add(int rt,int l,int r,int L,int R)
{if (L<=l && r<=R){pushdown(rt,l,r);d[rt]+=r-l+1;if (l>=r && d[rt]>=k)maxk[rt]=1;flag[rt]++;return;}pushdown(rt,l,r);int mid=(l+r)>>1;if (L<=mid)add(Lson,L,R);if (R>mid)add(Rson,L,R);up(rt);
}
void incase(int rt,int l,int r)
{if (l>=r){if(d[rt]>=k)maxk[rt]=1;return;}pushdown(rt,l,r);int mid=(l+r)>>1;incase(Lson);incase(Rson);up(rt);
}
void build(int rt,int l,int r)
{flag[rt]=0;if(l>=r){d[rt]=0;maxk[rt]=0;flag[rt]=0;return;}int mid=(l+r)>>1;build(Lson);build(Rson);up(rt);
}
int main()
{int kase=0,a,b,cur;while (scanf("%d%d%d",&n,&m,&k)!=EOF){for (int i=1;i<=n;i++){scanf("%d",&A[i]);}sort(A+1,A+1+n);build(1,1,n);cur=1;for (int i=1;i<=m;i++){scanf("%d%d",&a,&b);int l=upper_bound(A+1,A+1+n,cur)-A;int r=upper_bound(A+1,A+1+n,a)-A;r--;if (l<=r)add(1,1,n,l,r);cur=b;}incase(1,1,n);printf("Case %d: %d\n",++kase,maxk[1]);}return 0;
}

好久没写线段树了,这个题一写完就WA了,后来发现,首先二分出来的区间先要判断下来,若区间不存在就不要进行插入了,还有就是pushdown,我一开始是计划每次只增加1

,要进行下一次懒惰标记的时候先把上一次 的懒惰标记down下去,结果在pushdown函数里面没判断儿子的标记,如果儿子标记了 也得先down儿子啊。结果这样超时了,还是不能这样,索性就每次懒惰标记直接++,最后把整个标记down下去就行

发现其实d数组完全没有必要的,这个值没有必要维护,只是一开始写的时候没计划的太清,就这样写了。其实没必要。

最后为了避免某个懒惰标记未被down下去,最后还用个incase函数再走一遍线段树,把值给更新一下。

转载于:https://www.cnblogs.com/kkrisen/p/3596760.html

UVA 12663 第九届省赛 高桥与低桥 线段树相关推荐

  1. nyoj1273 河南省第九届省赛_宣传墙、状压DP+矩阵幂加速

    宣传墙 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 ALPHA 小镇风景美丽,道路整齐,干净,到此旅游的游客特别多.CBA 镇长准备在一条道路南 面 4*N 的墙上做 ...

  2. 蓝桥杯嵌入式-第九届省赛-电子定时器

    /*程序说明: 蓝桥杯大赛嵌入式-第九届省赛-电子定时器软件环境: Keil uVision 4.11 硬件环境: CT117E嵌入式竞赛板(代码兼容ILI932X系列.uc8230液晶控制器)日 期 ...

  3. 蓝桥杯嵌入式STM32G431——第九届省赛真题电子定时器

    第九届省赛真题电子定时器 第九届省赛真题 主函数代码(不包含各模块初始化代码) 按键模块与LCD模块的逻辑图(仅供参考) 第九届省赛真题 主函数代码(不包含各模块初始化代码) #include &qu ...

  4. csu1335 高桥与低桥

    Description 有个脑筋急转弯是这样的:有距离很近的一高一低两座桥,两次洪水之后高桥被淹了两次,低桥却只被淹了一次,为什么?答案是:因为低桥太低了,第一次洪水退去之后水位依然在低桥之上,所以不 ...

  5. CSU 1335 高桥和低桥(二分)

    高桥和低桥 Description 有个脑筋急转弯是这样的:有距离很近的一高一低两座桥,两次洪水之后高桥被淹了两次,低桥却只被淹了一次,为什么?答案是:因为低桥太低了,第一次洪水退去之后水位依然在低桥 ...

  6. 1668: 高桥和低桥

    1668: 高桥和低桥 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 42  Solved: 25 [Submit][Status][Web Boar ...

  7. zcmu-1668: 高桥和低桥

    1668: 高桥和低桥 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 38  Solved: 22 [ Submit][ Status][ Web B ...

  8. 高桥和低桥 (离散化 )

    有个脑筋急转弯是这样的:有距离很近的一高一低两座桥,两次洪水之后高桥被淹了两次,低桥却只被淹了一次,为什么?答案是:因为低桥太低了,第一次洪水退去之后水位依然在低桥之上,所以不算"淹了两次& ...

  9. zcmu1668 高桥和低桥

    1668: 高桥和低桥 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 42  Solved: 25 [Submit][Status][Web Boar ...

最新文章

  1. matlab矩阵中如何去掉重复的行;如何找到相同的行,并找到其位置
  2. 挖掘频繁模式、关联和相关
  3. mysql ---- innodb-3-锁、事务
  4. 常用JQuery插件整理
  5. Qt Creator 使用技巧
  6. (96)FPGA面试题-Verilog设计半加器
  7. 【推荐】Zeal 离线API文档浏览器
  8. 没有基础怎么学Web前端?相关学习路线是什么?
  9. java jdbc sql 参数_java – Postgresql JDBC表值参数
  10. vue 中provide的用法_浅谈vue中provide和inject 用法
  11. YARN调试过程中的常见问题
  12. Tomcat8.5访问HTML页面出现乱码
  13. VS2008安装错误,解决方案
  14. Qt知识回顾(九)——2D绘画
  15. 使用Arduino解码并发送433MHz RF无线射频信号
  16. PoE供电技术与应用
  17. XCode下Swift – WebView IOS demo
  18. Filtered request failed
  19. log文件过大处理方法
  20. 我的移动智能2-corner detection

热门文章

  1. 华为 任正非说,“很多找工作的人问我,来公司工作有没有双休?需不需要加班?
  2. python经典程序练习题6:健康食谱的输出。列出5种不同的食材,输出两两之间可能的组合形式
  3. [z] 人工智能和图形学、图像处理方面的各种会议的评级
  4. Dynamo相关下载教程分享!(附软件包和Revit使用插件Revit Lookup下载教程)
  5. CVPR 2021 | Involution:超越卷积和自注意力的神经网络新算子
  6. Involution
  7. LeetCode:145. Binary Tree Postorder Traversal
  8. Redis Cluster 集群管理维护
  9. 易飞ERP进货单源码——复制报价单
  10. 小猪猪的matlab学习笔记