#include <bits/stdc++.h> using namespace std; int n; int a[200005]; map<int, int>mp; queue<int>q; int main() { while (~scanf ("%d", &n) ) { mp.clear(); //清空map int len = 0; int e = 0; for (int i = 1; i <= n; i++) { scanf ("%d", &a[i]); mp[a[i]] = mp[a[i] - 1] + 1; //map用法 下标为第一个键值 if (len < mp[a[i]]) { len = mp[a[i]]; e = a[i]; } } int s = e - len + 1; for (int i = 1; i <= n; i++) { if (a[i] == s) { q.push (i); s++; //队列储存下标 } if (s == e + 1) break; } printf ("%d\n", len); while (1) { printf ("%d", q.front() ); q.pop(); if (q.empty() ) { printf ("\n"); break; } else printf (" "); } } return 0; }
【map/连续递增子序列】 Consecutive Subsequence CF977F
猜你喜欢
转载自blog.csdn.net/ummmmm/article/details/80292633
今日推荐
周排行