【原题题面】传送门

【简化题意】

给定一个长度为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. LVS,Keepalived,HAproxy区别与联系

    LVS,Keepalived,HAproxy区别与联系 LVS 全称Linux Virtual Server,也就是Linux虚拟服务器,由章文嵩(现就职于于淘宝,正因为如此才出现了后来的fullna ...

  2. ARM-linux与Ubuntu开发工具NFS及流程

    Linux虚拟机的型号是:Ubuntu 12.04 VMware:workstation 14 pro   author: Xianghai Ding Date:2019.01.04  板端:Hi35 ...

  3. ES6语法 Promise Iterator

    类和对象 基本定义: class Parent{ constructor(name='lmx'){ //name= 默认值 this.name=name } } let v_parent = new ...

  4. 【tomcat启动失败问题】Unable to start embedded Tomcat

    启动spring boot 项目后抛出如下异常: org.springframework.context.ApplicationContextException: Unable to start em ...

  5. 什么是span?跨径

    研究zipkin时候,发现有个span的概念 https://segmentfault.com/a/1190000012342007

  6. java项目的异常处理

    异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error:如果你用System.ou ...

  7. PHP多维数组替换某一元素的值

    数组结构如下所示: $arr = [ [ 'id' => 1, 'sub'=> [ [ 'value' => 11.2 ], [ 'value' => 34.5 ] ] ], ...

  8. c++基础 - constexpr

    const expression常量表达式,指值不会改变,并且在编译过程中就能得到计算结果的表达式. 复杂系统难以分辨一个初始值是否是常量表达式,因此提出constexptr以提示编译器,用来验证变量 ...

  9. springboot+web文件上传和下载

    一.首先安装mysql数据库,开启web服务器. 二.pom.xml文件依赖包配置如下: <?xml version="1.0" encoding="UTF-8&q ...

  10. 高校表白APP-冲刺第三天

    第三天,我们进行了第三次会议. 一.任务: 昨日任务:完成APP基本的登陆框架. 今日任务:完成登录界面修改界面注册界面,并解决闪退. 明日任务:完成界面跳转,并彻底解决闪退. 二.遇到的困难: 今天 ...