• CF-1250A-Berstagram


    题目:https://vjudge.net/problem/CodeForces-1250A

    分析:开两个数组分别储存数值与位置,交换时将位置和数值一起交换并更新数值的最大最小位置,最后输出。

    注意:交换后更新位置时误用交换后的错误值。

    #include <stdio.h>
    int v[400400],p[400400],b[400400];
    struct node{
        int min;
        int max;
    } s[400400];
    void swap(int *a,int *b){
        int z=*a;
        *a=*b;
        *b=z;
    }
    int main(void){
        int n,m;
        scanf("%d %d",&n,&m);
        for(int i=1;i<=n;i++){
            v[i]=p[i]=s[i].min=s[i].max=i;
        }
        for(int i=1;i<=m;i++)scanf("%d",&b[i]);
        for(int i=1;i<=m;i++){
            int x=b[i];//后数 
            if(p[x]==1)continue;
            int pre=p[x]-1;//前数位置 
            int q=v[pre];//前数
            int r=p[x];//后数位置 
            swap(&v[pre],&v[r]);
            swap(&p[x],&p[q]);
            s[x].min=s[x].min>pre?pre:s[x].min;
            s[q].max=s[q].max>r?s[q].max:r;
        }
        for(int i=1;i<=n;i++)
        printf("%d %d
    ",s[i].min,s[i].max);
        return 0;
    }
  • 相关阅读:
    Count_sort C++
    Priority_Queue C++
    HeapSort C++
    Randomized_QuickSort C++
    QuickSort c++
    我的开发环境
    github and eclipse
    centos 7 install eclipse cdt and use github
    github commands
    文化-梁晓声
  • 原文地址:https://www.cnblogs.com/yanying7/p/12266753.html
Copyright © 2020-2023  润新知