线段树||BZOJ5194: [Usaco2018 Feb]Snow Boots||Luogu P4269 [USACO18FEB]Snow Boots G
题面:P4269 [USACO18FEB]Snow Boots G
题解:
把所有砖和靴子排序,然后依次处理每一双靴子,把深度小于等于它的砖块都扔线段树里,问题就转化成了求线段树已有的砖块中最大的砖块间距是否小于当前靴子间距。
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define max(a,b) ((a)>(b)?(a):(b))
using namespace std;
const int maxn=(1e5)+,maxb=(1e5)+;
int N,B,f1;
bool ans[maxb];
struct P{
int x,id,d;
}F[maxn],S[maxb];
struct Tree{
int l,r,h_,t_,mx;
}t[maxn<<];
inline bool cmp(const P&a,const P&b){return(a.x<b.x);}
inline void Pushup(int x){
int ls=x<<,rs=x<<|;
if(t[ls].r-t[ls].l+==t[ls].mx)t[x].h_=t[ls].mx+t[rs].h_;else t[x].h_=t[ls].h_;
if(t[rs].r-t[rs].l+==t[rs].mx)t[x].t_=t[rs].mx+t[ls].t_;else t[x].t_=t[rs].t_;
t[x].mx=max(t[ls].mx,t[rs].mx);
t[x].mx=max(t[x].mx,t[ls].t_+t[rs].h_);
return;
}
inline void Build(int x,int l,int r){
t[x].l=l;t[x].r=r;
if(l==r){
t[x].h_=t[x].t_=t[x].mx=;
return;
}
int mid=(l+r)>>,ls=x<<,rs=x<<|;
Build(ls,l,mid);Build(rs,mid+,r);
Pushup(x);
return;
}
inline void Update(int x,int q){
int l=t[x].l,r=t[x].r;
if(l==r&&l==q){
t[x].h_=t[x].t_=t[x].mx=;
return;
}
int mid=(l+r)>>,ls=x<<,rs=x<<|;
if(q<=mid)Update(ls,q);
else Update(rs,q);
Pushup(x);
return;
}
int main(){
scanf("%d%d",&N,&B);
for(int i=;i<=N;i++){
scanf("%d",&F[i].x);
F[i].id=i;
}
for(int i=;i<=B;i++){
scanf("%d%d",&S[i].x,&S[i].d);
S[i].id=i;
}
sort(F+,F+N+,cmp);
sort(S+,S+B+,cmp);
Build(,,N);
f1=;//F是地砖,S是靴子 ;f1是地砖,f2是靴子
for(int f2=;f2<=B;f2++){//依次处理每一双靴子
while(f1<N&&F[f1+].x<=S[f2].x){
f1++;
Update(,F[f1].id);
}
if(t[].mx<S[f2].d)ans[S[f2].id]=;
}
for(int i=;i<=B;i++)printf("%d\n",ans[i]);
return ;
}
By:AlenaNuna
线段树||BZOJ5194: [Usaco2018 Feb]Snow Boots||Luogu P4269 [USACO18FEB]Snow Boots G的更多相关文章
- 线段树||BZOJ1593: [Usaco2008 Feb]Hotel 旅馆||Luogu P2894 [USACO08FEB]酒店Hotel
题面:P2894 [USACO08FEB]酒店Hotel 题解:和基础的线段树操作差别不是很大,就是在传统的线段树基础上多维护一段区间最长的合法前驱(h_),最长合法后驱(t_),一段中最长的合法区间 ...
- BZOJ5194: [Usaco2018 Feb]Snow Boots(排序&set)(可线段树优化)
5194: [Usaco2018 Feb]Snow Boots Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 102 Solved: 79[Subm ...
- bzoj5194: [Usaco2018 Feb]Snow Boots
还真是.. 就是 一个被不点名批评的垃圾骗分暴力选手被普及难度的省选信心(??)模拟赛艹爆的题解 的t3嘛... #include<cstdio> #include<iostream ...
- 线段树初步——转载自ljc20020730
线段树初步 线段树模板1:https://www.luogu.org/problem/show?pid=3372 线段树模板2:https://www.luogu.org/problem/show ...
- 2021.12.08 P1848 [USACO12OPEN]Bookshelf G(线段树优化DP)
2021.12.08 P1848 [USACO12OPEN]Bookshelf G(线段树优化DP) https://www.luogu.com.cn/problem/P1848 题意: 当农夫约翰闲 ...
- 【bzoj5123】[Lydsy12月赛]线段树的匹配 树形dp+记忆化搜索
题目描述 求一棵 $[1,n]$ 的线段树的最大匹配数目与方案数. $n\le 10^{18}$ 题解 树形dp+记忆化搜索 设 $f[l][r]$ 表示根节点为 $[l,r]$ 的线段树,匹配选择根 ...
- HDU 5266 pog loves szh III 线段树,lca
Pog and Szh are playing games. Firstly Pog draw a tree on the paper. Here we define 1 as the root of ...
- Bzoj[Usaco2018 Feb]5194 Snow Boots(线段树)
Description 到冬天了,这意味着下雪了!从农舍到牛棚的路上有N块地砖,方便起见编号为1…N,第i块地砖上积了fi英尺的雪 .在Farmer John的农舍的地窖中,总共有B双靴子,编号为1… ...
- BZOJ 1651: [Usaco2006 Feb]Stall Reservations 专用牛棚( 线段树 )
线段树.. -------------------------------------------------------------------------------------- #includ ...
随机推荐
- 在Razor中输出Html的两种方式
Razor中所有的Html都会自动编码,这样就不需要我们手动去编码了(安全),但在需要输出Html时就是已经转义过的Html文本了,如下所示: @{ string thisTest = "& ...
- 修改PHP上传文件大小设置
问题: 上传MV到服务器发现有最大文件限制: 50M 怎么修改呢? 度娘了一把, 修改php.ini文件的upload_max_filesize = 100M 及 post_max_size = 10 ...
- 如何查看memcache的性能
memcache的运行状态可以方便的用 stats 命令显示.首先用telnet 127.0.0.1 11211这样的命令连接上memcache,然后直接输入stats就可以得到当前memcache的 ...
- 【Windows】字符串处理
1.截取字符串 举例说明其基本功能: @echo off set ifo=abcdefghijklmnopqrstuvwxyz0123456789 echo 原字符串(第二行为各字符的序号): ech ...
- JS 引擎执行机制
JS JS 是单线程语音 JS 的 Event Loop 是 JS 的执行机制.类似于 Android Handler 消息分发机制 JS 单线程 技术的出现都跟现实世界里的应用场景密切相关 JS 单 ...
- T-Pot平台cowrie蜜罐暴力破解探测及实现自动化邮件告警
前言:Cowrie是基于kippo更改的中交互ssh蜜罐, 可以对暴力攻击账号密码等记录,并提供伪造的文件系统环境记录黑客操作行为, 并保存通过wget/curl下载的文件以及通过SFTP.SCP上传 ...
- linux每日命令(30):Linux 用户及用户组相关文件、命令详解
一. 用户.用户组概念及其文件结构详解 Linux用户只有两个等级:root及非root.Linux中还有一部分用户,如:apache.mysql.nobody.ftp等,这些也都是非root用户,即 ...
- oracle数据泵笔记
1.创建目录 查询已有目录:select * from dba_directories 创建并授权: CREATE DIRECTORY dump_dir AS '/tmp/' grant read,w ...
- 【九天教您南方cass 9.1】 14 坐标数据的纠正
同学们大家好,欢迎收看由老王测量上班记出品的cass9.1视频课程 我是本节课主讲老师九天. 我们讲课的教程附件也是共享的,请注意索取 在测量空间中. 九天老师的联系方式 点击直接请教九天老师吧! ...
- Linux查看文件总的数据行数,并按行拆分
先利用 wc -l BLM.txt 读出 BLM.txt 文件一共有多少行. 再 1. 以行数拆分 -l 参数: split –l 50 原始文件 拆分后文件名前缀 例:以50行对文件进行 ...