对于某个靴子,如果0代表某个格能走,1代表不能走,那么只要连续的1的个数的最大值>=靴子的步长,那这个靴子就不能用。

那么只要对靴子和格子都按深度排个序,然后从大到小来扫一遍(靴子越来越浅,能走的格子就越来越少,也就是相当于在增加1的个数),现在只要能维护把0变成1后,连续的1个数的最大值就行了

用并查集就可以了(好像双向链表或者线段树也行?)。

  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. #define pa pair<int,int>
  4. using namespace std;
  5. const int maxn=;
  6.  
  7. ll rd(){
  8. ll x=;char c=getchar();
  9. while(c<''||c>'') c=getchar();
  10. while(c>=''&&c<='') x=x*+c-'',c=getchar();
  11. return x;
  12. }
  13.  
  14. int N,M;
  15. int d[maxn],siz[maxn],fa[maxn],ma,p[maxn];
  16. pa s[maxn],f[maxn];
  17. bool ans[maxn];
  18.  
  19. int getfa(int x){return x==fa[x]?x:fa[x]=getfa(fa[x]);}
  20.  
  21. inline void add(int x){p[x]=;
  22. int l=getfa(x-),r=getfa(x+);x=getfa(x);
  23. if(p[x+]) fa[r]=x,siz[x]+=siz[r];
  24. if(p[x-]) fa[l]=x,siz[x]+=siz[l];
  25. ma=max(ma,siz[x]);
  26. }
  27.  
  28. int main(){
  29. int i,j,k;
  30. N=rd(),M=rd();
  31. for(i=;i<=N;i++) f[i]=make_pair(rd(),i);
  32. for(i=;i<=M;i++) s[i]=make_pair(rd(),i),d[i]=rd();
  33. sort(f+,f+N+);sort(s+,s+M+);
  34. for(i=;i<=N;i++) fa[i]=i,siz[i]=;
  35. for(i=M,j=N;i;i--){
  36. for(;j&&f[j].first>s[i].first;j--){
  37. add(f[j].second);
  38. }ans[s[i].second]=d[s[i].second]>ma;
  39. }for(i=;i<=M;i++) printf("%d\n",ans[i]);
  40. }

luogu4269 Snow Boots G (并查集)的更多相关文章

  1. 线段树||BZOJ5194: [Usaco2018 Feb]Snow Boots||Luogu P4269 [USACO18FEB]Snow Boots G

    题面:P4269 [USACO18FEB]Snow Boots G 题解: 把所有砖和靴子排序,然后依次处理每一双靴子,把深度小于等于它的砖块都扔线段树里,问题就转化成了求线段树已有的砖块中最大的砖块 ...

  2. [USACO18FEB] Snow Boots G (离线+并查集)

    题目大意:略 网上各种神仙做法,本蒟蒻只想了一个离线+并查集的做法 对所有靴子按最大能踩的深度从大到小排序,再把所有地砖按照积雪深度从大到小排序 一个小贪心思想,我们肯定是在 连续不能踩的地砖之前 的 ...

  3. 【BZOJ 4662】 4662: Snow (线段树+并查集)

    4662: Snow Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 136  Solved: 47 Description 2333年的某一天,临冬突 ...

  4. 【XSY2707】snow 线段树 并查集

    题目描述 有\(n\)个人和一条长度为\(t\)的线段,每个人还有一个工作范围(是一个区间).最开始整条线段都是白的.定义每个人的工作长度是这个人的工作范围中白色部分的长度(会随着线段改变而改变).每 ...

  5. luogu5012 水の数列 (并查集+线段树)

    如果我们能求出来每个区间个数的最大分值,那就可以用线段树维护这个东西 然后出答案了 然后这个的求法和(luogu4269)Snow Boots G非常类似,就是我们把数大小排个序,每次都拿<=x ...

  6. hdu 1598 find the most comfortable road (并查集)

    find the most comfortable road Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  7. Educational Codeforces Round 51 (Rated for Div. 2) G. Distinctification(线段树合并 + 并查集)

    题意 给出一个长度为 \(n\) 序列 , 每个位置有 \(a_i , b_i\) 两个参数 , \(b_i\) 互不相同 ,你可以进行任意次如下的两种操作 : 若存在 \(j \not = i\) ...

  8. Codeforces Gym 101194G Pandaria (2016 ACM-ICPC EC-Final G题, 并查集 + 线段树合并)

    题目链接  2016 ACM-ICPC EC-Final Problem G 题意  给定一个无向图.每个点有一种颜色. 现在给定$q$个询问,每次询问$x$和$w$,求所有能通过边权值不超过$w$的 ...

  9. Codeforces Round #582 (Div. 3)-G. Path Queries-并查集

    Codeforces Round #582 (Div. 3)-G. Path Queries-并查集 [Problem Description] 给你一棵树,求有多少条简单路径\((u,v)\),满足 ...

随机推荐

  1. CF [2016-2017 ACM-ICPC CHINA-Final][GYM 101194 H] Great Cells

    很久以前做的一道思博题了,今天来补一补. 大致题意:在一个\(n*m\)的矩阵内填整数,数字在\([1,k]\)范围内.矩阵中某格的数为great number当且仅当与它同行同列的数字都严格比它小. ...

  2. OLED小记

    1.点阵组成OLED,OLED中有一个GRAM区域,区域中的值直接刷新到屏幕上,对应关系是1bit对应一个像素点: 2.要点亮一个像素点,只需要将GRAM中的对应bit位写1即可.GRAM中是分页来管 ...

  3. ML.NET 示例:二元分类之垃圾短信检测

    写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...

  4. Java中clone的写法

    Cloneable这个接口设计得十分奇葩,不符合正常人的使用习惯,然而用这个接口的人很多也很有必要,所以还是有必要了解一下这套扭曲的机制.以下内容来自于对Effective Java ed 2. it ...

  5. php安全配置记录和常见错误梳理

    通常部署完php环境后会进行一些安全设置,除了熟悉各种php漏洞外,还可以通过配置php.ini来加固PHP的运行环境,PHP官方也曾经多次修改php.ini的默认设置.下面对php.ini中一些安全 ...

  6. Python-复习-文件操作-21

    # 文件处理 # 打开文件 #open('路径','打开方式','指定编码方式') # 打开方式 r w a r+ w+ a+ b #r+ 打开文件直接写 和读完再写 # 编码方式 —— utf-8 ...

  7. PairProject——结对编程

    成员:12061162  王骜 12061225  钟毅恒 一.合作过程中的照片 . 二.结对编程的优缺点 优点: 1)在编程过程中,任何一段代码都不断地复审,同时避免了将写代码的责任抛给一个人的问题 ...

  8. M2贡献分分配方案

    1.初始分每个人都为0. 2.每周分配任务,按任务计分. 3.每周每个人有12.5分. 4.次周完成本周任务计6分. 5.未全部完成本周任务计6分. 6.12月29日统计分数,多出来的分数按完成任务数 ...

  9. ASP.NET MVC用户登录(Memcache存储用户登录信息)

    一.多站点共享用户信息解决方案: 采用分布式缓存Memcache模拟Session进行用户信息信息共享 1.视图部分

  10. ubuntu默认壁纸位置

    usr/share/backgrounds和usr/share/wallpapers