zoukankan      html  css  js  c++  java
  • P1155 双栈排序

    双栈排序

    洛谷链接

    用双栈进行排序,也就是给出一个序列,让你用两个栈来排序,输出排序的操作类型。

    实现也比较简单,如果存在一个k,使得i<j<k且a[k]<a[i]<a[j],那么i和j就不能存在一个栈中。

    代码:

     1 #include<cstdio>
     2 #include<cstdlib>
     3 #include<stack>
     4 #define N 420000
     5 using namespace std;
     6 int head[N],next[N],to[N],rs[N],n,a[N],f[N],num;
     7 stack<int> s1,s2;
     8 void add(int x,int y){
     9     next[++num]=head[x];
    10     to[num]=y;
    11     head[x]=num;
    12 }
    13 int dfs(int x,int c){
    14     rs[x]=c;
    15     for(int y,i=head[x];i;i=next[i]){
    16         y=to[i];
    17         if(rs[y]==rs[x]){
    18             printf("0");
    19             exit(0);
    20         }
    21         if(!rs[y])
    22             dfs(y,-c);
    23     }
    24 }
    25 int main(){
    26     scanf("%d",&n);
    27     for(int i=1;i<=n;++i)
    28         scanf("%d",&a[i]);
    29     f[n+1]=N;
    30     for(int i=n;i>=1;i--)f[i]=min(f[i+1],a[i]);
    31     for(int i=1;i<n;i++)
    32       for(int j=i+1;j<=n;j++){
    33           if(a[i]<a[j]&&f[j+1]<a[i]){
    34               add(i,j);
    35               add(j,i);
    36           }
    37       }
    38     for(int i=1;i<=n;++i){
    39         if(!rs[i]){
    40             dfs(i,1);
    41         }
    42     }
    43     int aim=1;
    44     for(int i=1;i<=n;i++){
    45         if(rs[i]==1){
    46             printf("a ");
    47             s1.push(a[i]);
    48         }
    49         else{
    50             printf("c ");
    51             s2.push(a[i]);
    52         }
    53         while((!s1.empty()&&s1.top()==aim)||(!s2.empty()&&s2.top()==aim)){
    54             if(!s1.empty()&&s1.top()==aim){
    55                 s1.pop();
    56                 printf("b ");
    57                 aim++;
    58             }
    59             else{
    60                 s2.pop();
    61                 printf("d ");
    62                 aim++;
    63             }
    64         }
    65     }
    66     return 0;
    67 }
    View Code
  • 相关阅读:
    python返回函数与匿名函数
    Session&Cookie
    write RE validation
    hello2 source anaylis
    Filter
    Development descriptor
    web.xml配置详解
    Annotation
    injector
    container
  • 原文地址:https://www.cnblogs.com/jsawz/p/6825782.html
Copyright © 2011-2022 走看看