| 题目名称 | 4393. [HNOI2016] 序列 |
|---|---|
| 输入输出 | sequence.in/out |
| 难度等级 | ★★★☆ |
| 时间限制 | 1500 ms (1.5 s) |
| 内存限制 | 512 MiB |
| 测试数据 | 10 |
| 题目来源 |
|
| 开放分组 | 全部用户 |
| 提交状态 | |
| 分类标签 | |
| 分享题解 |
| 通过:2, 提交:7, 通过率:28.57% | ||||
|
|
100 | 2.909 s | 52.38 MiB | C++ |
|
|
100 | 3.673 s | 146.81 MiB | C++ |
|
|
10 | 1.261 s | 4.38 MiB | C++ |
|
|
10 | 1.403 s | 3.44 MiB | C++ |
|
|
0 | 1.377 s | 3.40 MiB | C++ |
|
|
0 | 1.515 s | 3.38 MiB | C++ |
|
|
0 | 2.826 s | 81.89 MiB | C++ |
| 本题关联比赛 | |||
| 2026.5.16 | |||
| 关于 序列 的近10条评论(全部评论) |
|---|
简单数据结构。
给定一个长度为 $n$ 的序列,$m$ 次询问,每次询问给出 $[L_i,R_i]$,求出所有满足 $L_i\le l\le r\le R_i$ 的所有子区间 $[l,r]$ 最小值之和。大样例
第一行三个整数 $n,m,type$,其中 $type$ 的作用在于询问的给出形式。
第二行 $n$ 个整数,表示数列 $a_i$。
若 $type=0$,则接下来 $m$ 行,每行两个数 $L_i,R_i$,表示询问的区间 $L_i,R_i$。
若 $type=1$,则数据按照如下代码生成:
namespace gen{
typedef unsigned long long ull;
ull s,a,b,c,lastans=0;
ull rand(){
return s^=(a+b*lastans)%c;
}
};
其中,$s,a,b,c$ 的初始值在第三行给出,满足 $s,a,b$ 均在 $[0,10^9]$ 之间,$c$ 在 $[1,10^9]$ 之间。lastans 表示上次询问的答案转化为 unsigned long long 类型后的值,第一次询问时值为 $0$。
每次询问时,你可以通过下面的方式生成 $l$ 和 $r$:
l=gen::rand()%n+1; r=gen::rand()%n+1; if(l>r) std::swap(l,r);
一行一个整数,表示每次询问的答案转成 unsigned long long 类型后的异或和。
5 5 0 5 2 4 1 3 1 5 1 3 2 4 3 5 2 5
28
6 5 1 1 1 4 5 1 4 19 19 8 10
6
| 测试点编号 | $n$ | $m$ | $type$ | 特殊性质 |
|---|---|---|---|---|
| $1$ | $\le 10^3$ | $\le 10^3$ | $= 0$ | 无 |
| $2 \sim 4$ | $\le 2 \times 10^5$ | $\le 2 \times 10^5$ | ||
| $5$ | $L_i=1$ | |||
| $6 \sim 7$ | $\le 2 \times 10^5$ | $\le 2 \times 10^5$ | $= 1$ | 无 |
| $8 \sim 10$ | $\le 10^6$ | $\le 10^7$ |
HNOI2016。