题解:P12600 连号子序列数

P12600 连号子序列数题解

根据题意,我们要求关于 \(1 \sim N\) 的全排列的连号子序列数量,连号子序列的定义是子序列排序后形成一个连续的递增序列。

思路

通过分析,我们可以发现无论给定 \(1 \sim N\) 某一全排列如何,一定存在全排列为 \(1,2,3\dots N\) 的形式。
所以此时的连号子序列数量变成了非空串子串数量,所以答案为 \(\frac{N \times (N+1) }{2}\)

注意使用 long long

代码

#include<bits/stdc++.h>
using namespace std;
int main() {
    long long n;
    cin >> n;
    cout << n * (n + 1) / 2;
    // 读取输入,但不需要处理
    for (int i = 1; i <=n; ++i) {
        int x;
        cin >> x;
    }
    return 0;
}

这种方法的时间复杂度为 \(O(N)\),空间复杂度为 \(O(1)\),能够高效处理最大规模为 \(500000\) 的输入。

尝试只输入数字 \(N\) 然后直接输出答案的做法也可以通过本题。

posted @ 2025-07-25 21:53  WMWD  阅读(8)  评论(0)    收藏  举报