题目名称 | 3653. [NOI Online 2022 1st]丹钓战 |
---|---|
输入输出 | noi_online2022_stack.in/out |
难度等级 | ★★★ |
时间限制 | 1000 ms (1 s) |
内存限制 | 512 MiB |
测试数据 | 20 |
题目来源 | syzhaoss 于2022-03-26加入 |
开放分组 | 全部用户 |
提交状态 | |
分类标签 | |
查看题解 | 分享题解 |
通过:14, 提交:26, 通过率:53.85% | ||||
嗨嗨嗨 | 100 | 2.259 s | 40.79 MiB | C++ |
嗨嗨嗨 | 100 | 2.262 s | 40.79 MiB | C++ |
yrtiop | 100 | 2.869 s | 0.00 MiB | C++ |
op_组撒头屯 | 100 | 3.412 s | 0.00 MiB | C++ |
遥时_彼方 | 100 | 3.564 s | 0.00 MiB | C++ |
遥时_彼方 | 100 | 3.808 s | 0.00 MiB | C++ |
yrtiop | 100 | 5.230 s | 0.00 MiB | C++ |
yrtiop | 100 | 5.233 s | 0.00 MiB | C++ |
liuyiche | 100 | 5.240 s | 0.00 MiB | C++ |
yrtiop | 100 | 5.302 s | 0.00 MiB | C++ |
本题关联比赛 | |||
近5年noip/csp题目回顾 | |||
SYOI 专题 5:扫描线 |
关于 丹钓战 的近10条评论(全部评论) | ||||
---|---|---|---|---|
单调栈+ST+树上DFS,各个部分都不难,就是码量有点大。(当然也可能不是标准算法,是我太蒻了。。。)
| ||||
题如其名,不过为啥我刷新几下给我显示我提交了三次?
|
noi_online2022_stack.in
输出文件:noi_online2022_stack.out
简单对比有$n$个二元组$(a_i,b_i)$,编号为$1$到$n$。
有一个初始为空的栈 $S$,向其中加入元素$(a_i,b_i)$时,先不断弹出栈顶元素直至栈空或栈顶元素$(a_j,b_j)$满足$a_i\neq a_j$且 $b_i< b_j$,然后再将其加入栈中。
如果一个二元组入栈后栈内只有这一个元素,则称该二元组是“成功的”。
有 $q$ 个询问$[l_i,r_i]$,表示若将编号在$[l_i,r_i]$中的二元组按编号从小到大依次入栈,会有多少个二元组是“成功的”。
询问之间相互独立。
第一行两个正整数 $n,q$。
第二行 $n$ 个正整数表示 $a_i$。
第三行 $n$ 个正整数表示 $b_i$。
接下来 $q$ 行,每行两个正整数 $l_i,r_i$, 表示一组询问。
$q$ 行,每行一个自然数表示一组询问的答案。
10 4 3 1 3 1 2 3 3 2 1 1 10 10 2 9 7 5 4 7 6 1 1 4 7 8 7 10 1 8
3 2 2 3
以第一次询问 [1,4] 为例。
一开始栈为 {}。
加入 1 号二元组后栈为 {(3,10)},栈中只有一个元素,该二元组是“成功的”。
加入 2 号二元组 (1,10) 时,栈顶的 (3,10) 的 b 值不大于 2 号二元组的,因此弹栈。此时栈空,2号二元组入栈,栈为 {(1,10)},该二元组是“成功的”。
加入 3 号二元组 (3,2),此时栈顶元素与之 a 值不同,b 值比它更大,因而不需要弹栈,直接将3 号二元组入栈,栈为 {(1,10),(3,2)},栈中有多个元素,该二元组不是“成功的”。
加入 4 号二元组 (1,9),此时栈顶元素 (3,2) 的 b 值比它小,弹栈。弹栈后栈顶元素 (1,10) 与(1,9) 的 a 值相同,继续弹栈。此时栈空,4 号二元组入栈,栈为 {(1,9)},该二元组是“成功的”。
共有 3 个二元组是“成功的”,因而答案为 3。
对于所有测试点:$1\leq n,q\leq 5\times 10^5,1\leq a_i,b_i\leq n,1\leq l_i,r_i\leq n$。
每个测试点的具体限制见下表:
NOI Online 2022 1st 提高组 T1