边循环边输入,用map记录,当前长度等于上一个的长度加一。记录最后一个和最大长度。先输出长度,在输出连续的序号。
代码:
#include<iostream>
#include<string>
#include<map>
using namespace std;
map<int,int> sum;
int a[2000005];
int main(){
int n,x,maxl=0,last=0;
cin>>n;
for(int i=1;i<=n;i++){
cin>>x;
a[i]=x;
sum[x]=sum[x-1]+1;//前面一个的最大长度+1
int t=sum[x];
if(t>maxl){
maxl=sum[x];//记录长度和最后一个
last=x;
}
}
cout<<maxl<<endl;
int num=last-maxl+1;//第一个
for(int i=1;i<=n;i++){
if(a[i]==num){
cout<<i<<" ";
num++;//序号+1,继续找号码
}
}
return 0;
}