[USACO18FEB] Snow Boots G (离线+并查集)
题目大意:略
网上各种神仙做法,本蒟蒻只想了一个离线+并查集的做法
对所有靴子按最大能踩的深度从大到小排序,再把所有地砖按照积雪深度从大到小排序
一个小贪心思想,我们肯定是在 连续不能踩的地砖之前 的一个位置开始跳,如果这都不能跳过这一段连续的坏地砖,说明这个靴子肯定不能用
那么离线靴子以后,会发现不能踩的瓷砖是逐渐添加上去的,相当于求序列中最长连续坏点的长度
可以用并查集维护,一个点如果不能踩,就去merge它左右也不能踩的地砖,即积雪深度大于等于这块地砖
再用并查集维护一个size表示当前联通块大小,发现最大的size始终都是递增的,所以并不需要什么额外的数据结构去维护
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 100100
using namespace std; int n,B;
int f[N],fa[N],sz[N];
struct node{int id,dep;}d[N];
struct Boot{int s,d,ans,id;}b[N];
int cmpnode1(node s1,node s2){return s1.dep>s2.dep;}
int cmp1(Boot s1,Boot s2){return s1.s>s2.s;}
int cmp2(Boot s1,Boot s2){return s1.id<s2.id;}
int find_fa(int x){
int y=x;
while(fa[y]!=y) y=fa[y];
while(fa[x]!=y){
int pre=fa[x];
fa[x]=y;
x=pre;
}return y;
} int main()
{
scanf("%d%d",&n,&B);
for(int i=;i<=n;i++)
scanf("%d",&f[i]),d[i].dep=f[i],d[i].id=i,fa[i]=i,sz[i]=;
for(int i=;i<=B;i++)
scanf("%d%d",&b[i].s,&b[i].d),b[i].id=i;
sort(b+,b+B+,cmp1);
sort(d+,d+n+,cmpnode1);
int k=,x,y,fx,fy,ma=;
for(int i=;i<=n;i++)
{
while(d[k].dep>b[i].s)
{
x=d[k].id,fx=find_fa(x),ma=max(ma,sz[fx]);
if(f[x-]>=f[x]){
y=x-,fy=find_fa(y);
if(fy!=fx) fa[fy]=fx,sz[fx]+=sz[fy],ma=max(ma,sz[fx]);
}
if(f[x+]>=f[x]){
y=x+,fy=find_fa(y);
if(fy!=fx) fa[fy]=fx,sz[fx]+=sz[fy],ma=max(ma,sz[fx]);
}k++;
}
if(ma>b[i].d-) b[i].ans=;
else b[i].ans=;
}
sort(b+,b+B+,cmp2);
for(int i=;i<=B;i++)
printf("%d\n",b[i].ans);
return ;
}
[USACO18FEB] Snow Boots G (离线+并查集)的更多相关文章
- 线段树||BZOJ5194: [Usaco2018 Feb]Snow Boots||Luogu P4269 [USACO18FEB]Snow Boots G
题面:P4269 [USACO18FEB]Snow Boots G 题解: 把所有砖和靴子排序,然后依次处理每一双靴子,把深度小于等于它的砖块都扔线段树里,问题就转化成了求线段树已有的砖块中最大的砖块 ...
- [bzoj1015](JSOI2008)星球大战 starwar(离线+并查集)
Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武 器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通 ...
- ACM学习历程—Hihocoder 1291 Building in Sandbox(dfs && 离线 && 并查集)
http://hihocoder.com/problemset/problem/1291 前几天比较忙,这次来补一下微软笔试的最后一题,这题是这次微软笔试的第四题,过的人比较少,我当时在调试B题,没时 ...
- HDU5441 Travel 离线并查集
Travel Problem Description Jack likes to travel around the world, but he doesn’t like to wait. Now, ...
- Codeforces Round #582 (Div. 3)-G. Path Queries-并查集
Codeforces Round #582 (Div. 3)-G. Path Queries-并查集 [Problem Description] 给你一棵树,求有多少条简单路径\((u,v)\),满足 ...
- luogu4269 Snow Boots G (并查集)
对于某个靴子,如果0代表某个格能走,1代表不能走,那么只要连续的1的个数的最大值>=靴子的步长,那这个靴子就不能用. 那么只要对靴子和格子都按深度排个序,然后从大到小来扫一遍(靴子越来越浅,能走 ...
- 【杭电OJ3938】【离线+并查集】
http://acm.hdu.edu.cn/showproblem.php?pid=3938 Portal Time Limit: 2000/1000 MS (Java/Others) Memo ...
- BZOJ4551 Tjoi2016&Heoi2016树(离线+并查集)
似乎是弱化的qtree3.树剖什么的非常无脑.考虑离线.并查集维护每个点的最近打标记祖先,倒序处理,删除标记时将其与父亲合并即可. #include<iostream> #include& ...
- Artwork Gym - 101550A 离线并查集
题目:题目链接 思路:每个空白区域当作一个并查集,因为正着使用并查集分割的话dfs会爆栈,判断过于复杂也会导致超时,我们采用离线反向操作,先全部涂好,然后把黑格子逐步涂白,我们把每个空白区域当作一个并 ...
随机推荐
- 漫谈 Google 的 Native Client(NaCl) 技术(二)---- 技术篇(兼谈 LLVM)
转自:http://hzx5.blog.163.com/blog/static/40744388201172531637729/ 漫谈 Google 的 Native Client(NaCl) 技术( ...
- NFS学习
linux下搭建nfs服务: NFS是network filesystem的缩写,它可以通过网络,让不同的机器.不同的操作系统共享文件. NFS支持的功能比较多,默认端口也是随机的,基于远程调用服务( ...
- vncserve安装与使用
vncserver安装与配置 1.1.Centos安装 yum install tigervnc-server yum groupinstall "X Window System" ...
- python第六周:面向对象编程
面向对象编程: 世界万物,皆可分类 世界万物,对象 只要是对象,就肯定属于某种品类 只要是对象,就肯定有属性 oop编程利用"类"和"对象"来创建各种模型来实现 ...
- 【Codeforces Round #505 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final) C】
[链接] 我是链接,点我呀:) [题意] 给你一个字符串s. 让你在其中的某一些位置进行操作.. 把[1..i]和[i+1..n]翻转. 使得里面01交替出现的那种子串的长度最长. [题解] 可以用a ...
- <url-pattern>/</url-pattern> 拦截请求
一.springmvc 前端控制器 <!-- springmvc的前端控制器 --> <servlet> <servlet-name>fw-sso-web</ ...
- springboot配置容器
servlet容器配置 Spring Boot快速的原因除了自动配置外,另一个就是将web常用的容器也集成进来并做自动配置,让使用它的人能更快速的搭建web项目,快速的实现自己的业务目的.什么是容器? ...
- 怎样改动 VC6.0 4.0 2010 打印预览界面上的文字
前言:尽管早已下决心不再碰微软的东西,但手头的项目还得须要维护. 遇到问题还能解决. 问题由来: 之前的软件开发是基于中文环境开发的,建立项目的时候,选择了中文,为了方便客户使用.我们使用了静态编译的 ...
- Apache Pig的前世今生
近期,散仙用了几周的Pig来处理分析我们站点搜索的日志数据,感觉用起来非常不错,今天就写篇笔记介绍下Pig的由来,除了搞大数据的人,可能非常少有人知道Pig是干啥的.包含一些是搞编程的,但不是搞大数据 ...
- windows、linux劫持技术
windows系统以下能够利用detours劫持 realse 模式劫持,调试的程序不能够 函数劫持能够实现的效果. 函数的劫持原理 我们怎样实现-detours detours是微软亚洲研究院出品 ...