new file: P15791.cpp
Check cpp / md pair / Check md headers (push) Successful in 5s

This commit is contained in:
hanyixuanten committed 2026-10-20 12:57:20 +00:00
1 parent 255e8aad86
commit 611e457220
2 files changed
+208

No files matched your search

+67
View File
@@ -0,0 +1,67 @@
#include <bits/stdc++.h>
int n, m;
int a[500005];
int t[500005];
using namespace std;
struct seg {
int l, r;
long long num, lz;
} seg[2000005];
void pd(int now) {
seg[now * 2].lz += seg[now].lz, seg[now * 2 + 1].lz += seg[now].lz;
seg[now * 2].num += seg[now].lz, seg[now * 2 + 1].num += seg[now].lz;
seg[now].lz = 0;
}
void pu(int now) { seg[now].num = max(seg[now * 2].num, seg[now * 2 + 1].num); }
void init(int now, int l, int r) {
seg[now].l = l, seg[now].r = r;
if (l == r) {
return;
}
int mid = (l + r) >> 1;
init(now * 2, l, mid);
init(now * 2 + 1, mid + 1, r);
}
long long query(int now, int l, int r) {
if (r < seg[now].l || l > seg[now].r) {
return -1e18;
}
if (r >= seg[now].r && l <= seg[now].l) {
return seg[now].num;
}
pd(now);
return max(query(now * 2, l, r), query(now * 2 + 1, l, r));
}
void edit(int now, int l, int r, long long num) {
if (r < seg[now].l || l > seg[now].r) {
return;
}
if (r >= seg[now].r && l <= seg[now].l) {
seg[now].num += num, seg[now].lz += num;
return;
}
pd(now);
edit(now * 2, l, r, num);
edit(now * 2 + 1, l, r, num);
pu(now);
}
int pre[500005];
int main() {
scanf("%d%d", &n, &m);
init(1, 1, n);
for (int i = 1; i <= n; ++i) {
scanf("%d", &a[i]);
}
for (int i = 1; i <= m; ++i) {
scanf("%d", &t[i]);
}
for (int i = 1; i <= n; ++i) {
if (pre[a[i]])
edit(1, pre[a[i]], i - 1, t[a[i]]);
pre[a[i]] = i;
if (i > 1)
edit(1, i, i, max(query(1, 1, i - 1), 0ll));
}
printf("%lld\n", query(1, 1, n));
return 0;
}
+141
View File
@@ -0,0 +1,141 @@
# P15791 「1&0OI R1」空洞
## 题目背景
*而预感,正是未必成真,也未必绝不成真的侥幸。*
>$\text{\textcolor{66CCFF}{被掏空的心和满怀空白谱纸一样凄清}}$
>
>$\text{\textcolor{66CCFF}{误以为油墨味便是}\textcolor{EE0000}{你}\textcolor{66CCFF}{留下的气息}}$
误解的妄想,既从不真实的背叛中生发出恨意,又在萦杂的情丝中维系着明天。
而误解的题目,既是对赛时的绝望挥霍,也是对新的创造可能的发见。
本题,即是脱胎于 $\text{\textcolor{0000FF}{L}}$ 在某场比赛读题时所犯的『错误』。
## 题目描述
给定一个长为 $n$ 的序列 $a$,满足其中任意项是 $[1,m]$ 内的整数。有一个初始为空的序列 $b$,你可以通过进行任意次如下操作将 $b$ 变为 $a$:
- 生成一个非空序列 $c$,其需要满足每一项均为 $[1,m]$ 内的整数,并把其追加在序列 $b$ 的后面。
有一个长度为 $m$ 的序列 $t$,与你的操作的得分有关。定义当你向序列 $b$ 后面追加序列 $c$ 时,你的得分为:
$$\sum_{1\le x \le m,x \in b \land x \in c} t_x$$
即所有既在序列 $b$ 中也在序列 $c$ 中的数 $x$ 的 $t_x$ 之和。**注意按此定义,$c$ 中相同的多个数只会贡献一次得分。**
你的总得分为把 $b$ 从空序列变为 $a$ 的过程中所有操作的得分之和。请输出你能获得的最大的总得分。
## 输入格式
第一行输入两个正整数,分别代表 $n$ 和 $m$。
第二行输入 $n$ 个正整数,代表 $a_1,\ldots,a_n$。
第二行输入 $m$ 个整数,代表 $t_1,\ldots,t_m$。
## 输出格式
输出一个整数,表示可能获得的总得分的最大值。
**保证答案在 `long long` 范围内。**
## 输入输出样例 #1
### 输入 #1
```
5 3
1 2 1 2 3
2 1 5
```
### 输出 #1
```
3
```
## 输入输出样例 #2
### 输入 #2
```
10 6
1 1 2 3 5 5 4 3 6 6
-1099 -10 -4 6 8 -10
```
### 输出 #2
```
4
```
## 输入输出样例 #3
### 输入 #3
```
11 8
1 2 3 4 3 2 7 7 8 6 1
20 12 -7 12 20 15 -4 12
```
### 输出 #3
```
32
```
## 输入输出样例 #4
### 输入 #4
```
8 8
5 2 6 3 4 1 5 6
-17 16 14 -11 16 -12 -12 15
```
### 输出 #4
```
16
```
## 说明/提示
**【样例解释】**
对于样例 \#1,一种得到最大得分的方案为依次在序列末尾加入 $\{1,2\},\{1\},\{2\},\{3\}$,每次操作的得分分别为 $0,2,1,0$,总和为 $3$。
对于样例 \#2,一种得到最大得分的方案为依次在序列末尾加入 $\{1,1,2,3,5\},\{5,4,3\},\{6,6\}$,每次操作的得分分别为 $0,4,0$,总和为 $4$。
对于样例 \#3,一种得到最大得分的方案为依次在序列末尾加入 $\{1,2 \},\{3,4,3,2\},\{7,7,8,6,1\}$,每次操作的得分分别为 $0,12,20$,总和为 $32$。
对于样例 \#4,一种得到最大得分的方案为依次在序列末尾加入 $\{5\},\{2,6,3,4,1,5,6\}$,每次操作的得分分别为 $0,16$,总和为 $16$。
**可以证明以上四个样例不能获得更大的得分。**
**【数据范围】**
对于所有测试点,有:
- $1 \le n,m\le 5 \times 10^5$;
- $1 \le a_i \le m$;
- $-10^9 \le t_i \le 10^9$。
**请注意 $t_i$ 可能为负数。**
每个测试点的具体数据范围和特殊性质见下表。
::cute-table{tuack}
|测试点编号| $n \le $ | 特殊性质 |
|:---:|:-:|:-:|
| $1\sim2$ | $100$ | 无 |
| $3\sim4$ | $5000$ | ^ |
| $5\sim6$ | $5 \times 10^5$ | $t_i \ge 0$ |
| $7\sim10$ | ^ | 无 |