#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
最新推荐文章于 2022-12-03 12:03:27 发布