[USACO18FEB]Snow Boots G

这篇博客介绍了USACO18FEB比赛中的Snow Boots G问题,内容涉及如何利用线段树和离线算法解决雪地行走的问题。题目要求判断在给定雪堆高度和鞋子限制下,能否走完全程。解决方案是首先将所有位置设为不可走,按雪堆高度排序,然后依次处理雪和鞋子,更新线段树状态并统计连续不可走区域的个数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[USACO18FEB]Snow Boots G
题意
现在有n块地砖,除了第一块地砖和最后一块地砖,其余每一块地砖都堆积了高度为a[i]的雪,你现在有b双鞋子,没双鞋子最多可以在高度为d的雪地上走s步,现在问你那些鞋子可以走完这段路。
思路
线段树(单点修改)+离线
(因为询问具有单调性,所以我们可以使用离线来做)
我们假设一个位置为1表示可以走,为0表示不可以走。我们在计算某双鞋子能否走过这段路,只需要判断当前情况下,这双鞋子能够走的步数是否大于连续的0的个数。
最开始,我们将所有的位置都设置为0,表示所有的位置都不可以走,这个时候我们将雪和鞋子放在一起,然后按照雪的高度进行排序,从小到大进行扫描。
如果我们扫描到当前的位置是雪,那么我们在线段树中将雪的这个位置修改为1,表示这块区域是可以到达的(因为我们是按照雪的高度进行排序的,那么后面的雪的高度更高,那么对于前面高度的雪肯定是可以到达的);如果扫描到当前的位置是鞋子,那么这个时候我们就要统计一下从1-n这段区间内的连续的0的个数。

#include <bits/stdc++.h>

#define int long long

using namespace std;

const int N = 1e5 + 10;

int ans[N];

struct node
{
   
    int l, r;
    int len;
    int lmax, rmax;
    int maxx;
}tr[N << 2];

struct Edge
{
   
    int id, step, deep;
    int tag;
    bool operator < (const Edge &t) const
    {
   
        return (deep == t.deep) ? tag < t.tag : deep < t.deep;
    }
}a[N << 1];

void pushup(int u)
{
   
    tr[u].len = tr[u 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值