ABC 444

D

这题的大概意思是 $b_i$ 为 $a_i$ 个 $1$,然后让你求 $\sum^{n}_{i=1} b_i$。

然后关键点就是

对于 $b_i$ , 在不进位的前提下是多少与什么有关?

是不是 $a$ 中大于等于 $i$ 的数的数量,然后模拟就完了

E

这题其实很简单,用滑动窗口,枚举 $r$,再向右移动的过程中,每次尝试加入一个 $a_r$,如何加入 $a_r$ 后,有一个数与 $a_r$ 的差值小于 $d$,那么就一直移动 $l$,直到没有冲突。

然后怎么 check 有没有冲突呢?只用一个 set,二分一下第一个大于等于 $x - d + 1$ 的数,如果找不到,或者找到的那个数已经 $\ge x + d$ 了,说明没有冲突,要不然就是有了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e6 + 5;
int n, d, l = 1, ans, a[N];
set<int>s;

signed main() {
cin >> n >> d;
for (int i = 1;i <= n;i++) {
cin >> a[i];
}
for (int r = 1;r <= n;r++) {
int now = a[r];
for (;;) {
auto it = s.lower_bound(now - d + 1);
if (it != s.end() && *it < a[r] + d) { s.erase(s.find(a[l]));l++; }
else break;
}
s.insert(a[r]);
ans += r - l + 1;
}
cout << ans << "\n";
return 0;
}

本场笑点:

我先把 E A了才去看的 D,差点崩了。


ABC 444
http://example.com/2026/02/07/ABC-444/
作者
Cheese_zzz
发布于
2026年2月7日
许可协议