CF 977F - Consecutive Subsequence map

mac2026-09-25  9

题目链接

题意:找最长递增连续子序列, d, d+1. 输出长度和路径。

ac代码:

#include <cstdio> #include <string> #include <iostream> #include <map> #include <cmath> #include <cstring> #include <queue> #include <algorithm> #include <iterator> using namespace std; typedef long long ll; const ll inf = 1e18; const ll mx = 3e5+7; map<int, int>dp;///注意不能用unordered_map建表会超时 int a[mx]; int main() { int n, b = 0, k; scanf("%d", &n); for (int i = 0; i < n; ++i) { scanf("%d", &a[i]); dp[a[i]] = dp[a[i]-1]+1; if (dp[a[i]] > b) { b = dp[a[i]]; k = i; } } printf("%d\n", b); for (int i = 0; i < n && b; ++i) { if (a[i] == a[k]-b+1) { b--; printf("%d ", i+1); } } puts(""); }
最新回复(0)