首页 > 编程知识 正文

思维题,数学思维题

时间:2023-05-04 12:30:34 阅读:156586 作者:4164

有序思维问题链接

题意

有n个,从中找出从1到m的各个数,不改变顺序,使词典的顺序最小

题解

创建一个存储临时答案的数组,并从前到后遍历每个数。 如果不在临时答案数组中,请添加数组。 添加之前,删除所有小于前一个他的数量、后一个出现的数量,使词典顺序最小

代码

# include bits/stdc.husingnamespacestd; # definellonglong # defineullunsignedlonglong # defineldlongdoubleinlineintread ({ charch=getchar ) }; int x=0,f=1; wile(ch(0)|ch (9) ) if ) ch=='-' ) f=-1; ch=getchar (; }while((0)=chch=) ) {x=x*10 ch-'0); ch=getchar (; } return x*f; }ll mod=1e9 7; ll INF=1e15; ll Inf=0x3f3f3f3f; const int N=2e5 5; int a[N]、b[N]、p[N]、f[N]、q=0; int main () IOs:3360sync_with_stdio ) 0; CIN.Tie(0; int n,m; n=read (; m=read (; for(intI=1; i=n; I () { a [ I ]=读); b[a[i]]; }for(intI=1; i=n; I ) b(a(I )----; if (! f [ a [ I ] ) a[I]p[q]b[p[q] ) f[p[q--] )=0; } f[a[i]]=1; p[ q]=a[i]; }for(intI=1; i=m; I ) coutp[i] '; 返回0; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。