【原题题面】传送门

【简化题意】

给定一个长度为n的序列。 有m次询问,每次询问给定两个数si,di。你一开始站在0,每次你可以走不超过di,但你到达的位置的数不能超过si。问能否走到n+1。 n,m<=100000。

【未讲之前】不知道这题哪里跟线段树挂钩了,感觉跟线段树八竿子打不着的关系23333。

【题解】先根据s[i]的限制确定出哪些地方是不能走的,然后按s[i]从小到大排序,维护n上不能走的最长连续长度,因为每一次s[i]越来越大,那么限制越来越小。

还有弄清楚只要最长连续不能走的长度小于相应的d[i]就一定能走。这是因为每次能走的长度是1~d[i],所以我可以通过一定的调整使每次面临的都是最长连续长度的困难。

【讲了之后】按照s[i]排序离线这一点没想到哇。还有就是这题的切入口不是怎么线段树,而是理解题意之后想怎么维护不能走的最长连续长度,然后才想到可以用线段树。看网上还有题解说可以用set的,也可以实现的吧。

【具体实现】维护最长连续的长度,需要维护当前结点的范围内最长连续不能走的长度sz。

更新这个值需要max,lmax,rmax;

【code】

#include<bits/stdc++.h>
using namespace std; inline int read()
{
int N=,C=;char tf=getchar();
for(;!isdigit(tf);tf=getchar())C|=tf=='-';
for(;isdigit(tf);tf=getchar())N=(N<<)+(N<<)+(tf^);
return C?-N:N;
} const int N=;
int n,q,ans[N];
struct nc
{
int i,s,d;//id step deep
friend bool operator <(nc a,nc b){return a.d==b.d?a.s<b.s:a.d<b.d;}//先放砖
nc(int i=,int s=,int d=):i(i),s(s),d(d){}
}a[N<<];
struct tf
{
int m,l,r,s;//max lmax rmax size
}t[N<<]; void B(int l,int r,int p)
{
t[p].m=t[p].l=t[p].r=t[p].s=r-l+;
if(l==r)return;
int m=l+r>>;
B(l,m,p<<),B(m+,r,p<<|);
} void U(int l,int r,int p,int x)
{
if(l==r){t[p].m=t[p].l=t[p].r=;return;}
int m=l+r>>;x<=m?U(l,m,p<<,x):U(m+,r,p<<|,x); t[p].l=t[p<<].l==t[p<<].s?t[p<<].s+t[p<<|].l:t[p<<].l;
t[p].r=t[p<<|].r==t[p<<|].s?t[p<<|].s+t[p<<].r:t[p<<|].r; t[p].m=max(t[p<<].m,t[p<<|].m);
t[p].m=max(t[p].m,t[p<<].r+t[p<<|].l);
} int main()
{
n=read(),q=read(),B(,n,);
for(int i=,d;i<=n;++i)d=read(),a[i]=nc(i,,d);
for(int i=,d,s;i<=q;++i)s=read(),d=read(),a[i+n]=nc(i,d,s);
sort(a+,a+n+q+); for(int i=;i<=n+q;++i)
{
if(!a[i].s)U(,n,,a[i].i);
else ans[a[i].i]=t[].m<a[i].s;
}
for(int i=;i<=q;++i)printf("%d\n",ans[i]); return ;
}

我的代码不知怎么就是调不出来#¥%……&*),上面是豆哥的。

【BZOJ5194】Snow Boots的更多相关文章

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

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

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

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

  3. BZOJ5194: [Usaco2018 Feb]Snow Boots(排序&set)(可线段树优化)

    5194: [Usaco2018 Feb]Snow Boots Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 102  Solved: 79[Subm ...

  4. 【12c】扩展数据类型(Extended Data Types)-- MAX_STRING_SIZE

    [12c]扩展数据类型(Extended Data Types)-- MAX_STRING_SIZE 在12c中,与早期版本相比,诸如VARCHAR2, NAVARCHAR2以及 RAW这些数据类型的 ...

  5. 【webpack】-- 样式加载

    加载css需要用到css-loader和style-loader css-loader将@import 和 url 处理成正规的ES6 import ,如果@import指向的是一个外部资源,css- ...

  6. 【javascript】异步编年史,从“纯回调”到Promise

    异步和分块——程序的分块执行   一开始学习javascript的时候, 我对异步的概念一脸懵逼, 因为当时百度了很多文章,但很多各种文章不负责任的把笼统的描述混杂在一起,让我对这个 JS中的重要概念 ...

  7. 【codeforces】【比赛题解】#948 CF Round #470 (Div.2)

    [A]Protect Sheep 题意: 一个\(R*C\)的牧场中有一些羊和一些狼,如果狼在羊旁边就会把羊吃掉. 可以在空地上放狗,狼不能通过有狗的地方,狼的行走是四联通的. 问是否能够保护所有的羊 ...

  8. 【SPOJ】1182 Sorted bit sequence

    [算法]数位DP [题解]动态规划 写了预处理函数却忘了调用是一种怎样的体验? #include<cstdio> #include<cstring> #include<a ...

  9. 【webpack2】-- 入门与解析

    每次学新东西总感觉自己是不是变笨了,看了几个博客,试着试着就跑不下去,无奈只有去看官方文档. webpack是基于node的.先安装最新的node. 1.初始化 安装node后,新建一个目录,比如ht ...

随机推荐

  1. spring 相关注解详情(一)

    1.@controller 控制器(注入服务) 用于标注控制层,相当于struts中的action层2.@service 服务(注入dao) 用于标注服务层,主要用来进行业务的逻辑处理3.@repos ...

  2. U盘挂载指令

    相关步骤来自于百度 1.先确定U盘格式,如果是ntfs格式,需要先安装3g-ntfs这个软件支持ntfs格式,以下默认U盘为fat32格式 2.使用fdisk -l 查看分区表,找到u盘的设备号,比如 ...

  3. Alibaba, I'm interested in you.

    Working for Alibaba is an aspiration for some. For other it’s the possibility of lucrative stock opt ...

  4. Github 入门(“趣考网络”学习第一步)

    目录 为什么要使用GitHub 下载Github Desktop fork 与 pull request git pull,fetch,merge,push的区别与联系 git clone 与 dow ...

  5. 简单了解request与response

    本文对 request. response 简单描述,未涉及到具体的浏览器缓存.重定向.请求转发等代码部分. 一.Web服务器,浏览器,代理服务器 在看 response.request 对象之前,先 ...

  6. 学号 20175201张驰 《Java程序设计》第8周学习总结

    学号 20175201张驰 <Java程序设计>第8周学习总结 教材学习内容总结 第十五章 知识总结: 1.泛型类声明:可以使用"class 名称"声明一个类,例如:c ...

  7. less is more,so 只记 less

    less + 文件名 1.Enter键 :向下翻一行 2.空格键 :向下翻一屏 3.j键 :想下翻一行 4.k键 :向上翻一行 5.f键 :向下翻一屏 6.b键 : 向上翻一屏 7.d键 :向下翻半屏 ...

  8. 利用MathType为公式编号并引用

    序言 在理工科的论文撰写过程中, 公式编辑.编号以及引用非常普遍, 但是笔者没有发现word本身对公式编号和引用有比较好的支持, 所以只好求助于第三方插件. MathType在公式编辑方面表现比较出色 ...

  9. Centos上传下载命令

    [root@localhost ~]# rz -bash: rz: command not found //安装下载上传插件 [root@localhost ~]# yum -y install lr ...

  10. des加密算法java&c#

    项目中用到的数据加密方式是ECB模式的DES加密得到的十六进制字符串.技术支持让写一个.net版的加密算法.这里做一下记录. java版: 16进制使用的是bouncycastle. import c ...