• 牛客练习赛11


    链接:https://www.nowcoder.com/acm/contest/59/D
    来源:牛客网

    求距离
    时间限制:C/C++ 1秒,其他语言2秒
    空间限制:C/C++ 32768K,其他语言65536K
    64bit IO Format: %lld

    题目描述

    给你一个1 -> n的排列,现在有一次机会可以交换两个数的位置,求交换后最小值和最大值之间的最大距离是多少?

    输入描述:

    第一行一个数n
    之后一行n个数表示这个排列

    输出描述:

    输出一行一个数表示答案
    示例1

    输入

    5
    4 5 1 3 2

    输出

    3

    说明

    把1和2交换后
    序列为4 5 2 3 1
    最大值5在数组的2位置,最小值1在数组的5位置
    距离为3

    备注:

    对于100%的数据,1 <= n <= 100

    这个题目很简单,找到最大的和最小的,看他们到1和n的最大距离就好

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        int n,ma,mi;
        scanf("%d",&n);
        for(int i=1,x;i<=n;i++)
        {
            scanf("%d",&x);
            if(x==1)ma=i;
            if(x==n)mi=i;
        }
        if(mi>ma)swap(mi,ma);
        printf("%d",max(n-mi,ma-1));
        return 0;
    }

    假如不是1到n就是去维护下这个值

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        int n,mi,ma,maf,mif;
        scanf("%d",&n);
        scanf("%d",&mi);
        ma=mi,maf=mif=1;
        for(int i=2,x;i<=n;i++)
        {
            scanf("%d",&x);
            if(x>ma)ma=x,maf=i;
            else if(x<mi)mi=x,mif=i;
        }
        printf("%d",max(max(n-maf,maf-1),max(n-mif,mif-1)));
        return 0;
    }

    假如有相同的,就可以直接找到这些值,然后从两头遍历啊,只要一半就好了

    链接:https://www.nowcoder.com/acm/contest/59/A
    来源:牛客网

    假的线段树
    时间限制:C/C++ 1秒,其他语言2秒
    空间限制:C/C++ 32768K,其他语言65536K
    64bit IO Format: %lld

    题目描述

    给你一个长为n的序列a,有m次操作

    1.把区间[l,r]内所有x变成y

    2.查询区间[l,r]内第k小值

    输入描述:

    第一行两个数n,m
    第二行n个数表示序列a
    后面m行
    1 l r x y :把区间[l,r]中所有x变成y
    2 l r k :查询区间[l,r]中的第k小值

    输出描述:

    对于每个询问,输出一个数表示答案
    示例1

    输入

    3 3
    2 3 3
    2 1 3 1
    1 1 3 3 1
    2 1 3 2

    输出

    2
    1

    备注:

    对于100%的数据,1 <= n, m ,ai <= 1000

    n太小了,直接上啊

    #include <bits/stdc++.h>
    using namespace std;
    const int N=1e3+5;
    int a[N],s[N];
    int main()
    {
        int x,y,n,m,c,l,r;
        while(~scanf("%d%d",&n,&m))
        {
            for(int i=1; i<=n; i++)scanf("%d",&a[i]);
            while(m--)
            {
                scanf("%d",&c);
                if(c==1)
                {
                    scanf("%d%d%d%d",&l,&r,&x,&y);
                    for(; l<=r; l++)
                    {
                        if(a[l]==x)a[l]=y;
                    }
                }
                else
                {
                    memset(s,0,sizeof s);
                    scanf("%d%d%d",&l,&r,&x);
                    for(; l<=r; l++)s[a[l]]++;
                    for(int i=1; i<1001; i++)
                    {
                        if(s[i]>=x)
                        {
                            printf("%d
    ",i);
                            break;
                        }
                        x-=s[i];
                    }
                }
            }
        }
        return 0;
    }

    慢点的做法

    #include <bits/stdc++.h>
    using namespace std;
    const int N=1e3+5;
    int a[N],s[N];
    int main()
    {
        int x,y,n,m,c,l,r;
        while(~scanf("%d%d",&n,&m))
        {
            for(int i=1; i<=n; i++)scanf("%d",&a[i]);
            while(m--)
            {
                scanf("%d",&c);
                if(c==1)
                {
                    scanf("%d%d%d%d",&l,&r,&x,&y);
                    for(; l<=r; l++)
                        if(a[l]==x)a[l]=y;
                }
                else
                {
                    scanf("%d%d%d",&l,&r,&x);
                    for(int j=1; j<=(r-l+1); j++)
                        s[j]=a[j+l-1];
                    sort(s+1,s+2+r-l);
                    printf("%d
    ",s[x]);
                }
            }
        }
        return 0;
    }
  • 相关阅读:
    恐怖的东西,C#进入前四,进入正轨。
    JavaScript高级培训-自定义对象
    优秀程序员无他善假于物也
    Java基础知识之泛型全接触
    Haskell函数式编程之二递归
    敏捷的写博客
    生命、宇宙及万物的终极答案《图灵的秘密》读后感
    Java基础知识之Enum全接触
    WebDriver自动化测试利器剖析
    Haskell函数式编程之三纯函数式编程特点
  • 原文地址:https://www.cnblogs.com/BobHuang/p/8366753.html
Copyright © 2020-2023  润新知