(ps.学习打卡记录)
1 . 连号区间数
题意:在 1 ∼ N 1∼N 1∼N 的某个排列中有多少个连号区间呢?
这里所说的连号区间的定义是:如果区间 [ L , R ] [L,R] [L,R] 里的所有元素(即此排列的第 L L L 个到第 R R R 个元素)递增排序后能得到一个长度为 R − L + 1 R−L+1 R−L+1 的“连续”数列,则称这个区间连号区间。
由于 n ≤ 10000 n\leq 10000 n≤10000 ,所以可以采取枚举区间,区间和提前维护 O ( 1 ) O(1) O(1) 查询,统计计数即可。
仔细算了下,其实复杂度是 O ( n 2 − n 2 ) O(\frac{n^2-n}{2}) O(2n2−n) 的,大致在 1 e 7 1e7 1e7 的级别
#include <bits/stdc++.h>
int main() {
int a[10005], sum[10005];
int n;
cin >> n;
for (int i = 1; i <= n; ++i) cin >> a[i], sum[i] = sum[i - 1] + a[i];
int ans = 0;
for (int i = 1; i < n; ++i) {
int d = a[i], u = a[i];
for (int j = i + 1; j <= n; ++j) {
d = min(d, a[j]);
u