首页 > TAG信息列表 > P2894
P2894 [USACO08FEB]Hotel G
written on 2022-05-14 写这篇题解的原因是cpp说我基础太烂,于是找几题巩固。 一道巩固线段树基础的好题。同P3071好评。 审完题后,发现有许多区间操作,所以很明显是用数据结构维护,维护的过程都不难,因此普通线段树即可维护。 要注意的点就是,为了找连续区间的长度,我们的操作就是再维护[解题记录] P2894 [USACO08FEB]Hotel G
P2894 [USACO08FEB]Hotel G 题意简述 输入一个数 \(x\) ,在 \([1,n]\) 中找满足长度为 \(x\) 的最左边的全是 \(0\) 区间,输出左端点并将这个区间全部赋值为 \(1\),如果找不到则输出 \(0\) 输入两个数 \(x,y\) ,将区间 \([x,x+y-1]\) 里的数全部赋值为 \(0\) 解题思路 属于是线洛谷 P2894 [USACO08FEB]Hotel G(线段树)
传送门 解题思路 线段树维护区间最长连续0的长度。 板子。 AC代码 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<vector> #include<queue> #include<map> using namespace std; const int maxP2894 [USACO08FEB]Hotel G
题意就是维护整个序列最长连续01的位置,要求位置最左边,就是线段树最大连续子段和的查询操作稍作修改,每次查询分类讨论,如果左儿子内已经有满足题意的长度,就往左儿子找,如果左右凑起来有的话,就从左右凑起来,再查询右儿子有没有满足题意的长度. #include<iostream> #include<cstdio> #deP2894 [USACO08FEB]Hotel G
Rose 用维护区间最长连续1的方法就可以维护 但是还要维护一下最左边,不过这问题不大 维护一个区间最长连续子段,不在意位置就可以了 然后就可以在查询的时候,先看一看在不在左边,在看一看在不在中间,最后看一看在不在右边 就解决了 可见学线段树靠背模板是不行的 #include<iostream> #iP2894 [USACO08FEB] Hotel G
这个和那个COCI的STEP有点像。 这题维护前缀后缀区间答案、位置就行力。 区间assign就是把答案都设为区间长度或者0。 这里修改并不是最大连续空,但是我们记录了最大的左右端点,修改时搞成左端点+len-1就行力。 做完力。好时代,来临力!线段树题,主要是在pushup,pushdown上。 调试ingP2894 [USACO08FEB]Hotel G(线段树维护区间子串)
#include<bits/stdc++.h> using namespace std; inline int read() { int x=0,f=1;char c=getchar(); while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();} while (c>='0'&&c<='9') x=(x<