Acdream 1205 Disappeared Block(模拟)
来源:互联网 发布:网络标识域是什么意思 编辑:程序博客网 时间:2024/05/21 08:50
题目链接:传送门
题意:
有n个高度分别为hi的山峰,然后海平面,初始的时候为0,然后每隔一秒还平面会上升一米
然后给定m个时刻,求第i秒时这时候的山峰分成了几块初始的时候都连在一起很明显是一块。
分析:
我们将海面看着是不动的,然后将时间倒着来考虑,考虑山峰是逐渐上升的,然后如果它的
在这个某时刻之前如果它的左右的山峰都没有出现的话那么块数就要增加,否则如果左右都
出现了的话那么块数就要减一。
代码如下:
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 1e6+10;struct nod{ int id,h; bool operator <(const struct nod &tmp)const{ return h>tmp.h; }}p[maxn];int s[maxn];int ans[maxn];bool vis[maxn];int main(){ int t,n,m,cas=1; scanf("%d",&t); while(t--){ scanf("%d%d",&n,&m); for(int i=0;i<n;i++){ scanf("%d",&p[i].h); p[i].id=i; } for(int i=0;i<m;i++){ scanf("%d",&s[i]); } sort(p,p+n); memset(vis,0,sizeof(vis)); int i,j,high=0; for(i=m-1,j=0;i>=0;i--){ for(;j<n&&s[i]<p[j].h;j++){ vis[p[j].id]=1; if((p[j].id==0||!vis[p[j].id-1])&&(p[j].id==n-1||!vis[p[j].id+1]))//左右两边都没有露数来 high++; else if((p[j].id>0&&vis[p[j].id-1])&&(p[j].id<n-1&&vis[p[j].id+1])) high--; } ans[i]=high; } printf("Case #%d: ",cas++); for(int i=0;i<m;i++){ if(i==m-1) printf("%d\n",ans[i]); else printf("%d ",ans[i]); } } return 0;}
1 0
- acdream 1205 Disappeared Block 模拟
- Acdream 1205 Disappeared Block(模拟)
- acdream 1205 Disappeared Block 离线
- acdream(18) Disappeared Block(离散化+二分)
- 周赛一 ACdream 1204 模拟
- acdream 1188 telephone number 模拟
- 周赛一 ACdream 1196 模拟题
- acdream 1043 Always Turn Left(模拟)
- ACdream 1195 Sudoku Checker(模拟)
- ACdream 1196 KIDx's Pagination(模拟)
- ACdream 1196 KIDx's Pagination(模拟)
- ACdream 1038 Alien Numbers (模拟)
- ACdream
- Acdream
- ACdream
- ACdream
- ACdream
- ACdream
- MySQL常用函数
- linux的重定向使用
- 等待结果
- Eclipse将引用了第三方jar包的Java项目打包成jar文件的两种方法
- iOS第三方支付-微信支付
- Acdream 1205 Disappeared Block(模拟)
- Linux SMP负载均衡
- 开源协议介绍
- 【转载】SLB技术原理浅析
- BDB的Btree结构以及影响Btree性能的各种配置和方法
- Kafka VS ActiveMQ
- XMPP使用简介--登录
- Guice 学习(二)构造器注入(Constructor Inject)
- Android初学之------Android Studio 运行java程序