zoukankan      html  css  js  c++  java
  • 中庸之道

    【题目描述】

    给定一个长度为N的序列,有Q次询问,每次询问区间[L,R]的中位数。

    数据保证序列中任意两个数不相同,且询问的所有区间长度为奇数。

    【输入描述】

    第一行为N,Q。

    第二行N个数表示序列。

    接下来Q行,每行为L,R,表示一次询问。

    【输出描述】

    输出Q行,对应每次询问的中位数。

    【样例输入】

    5 3

    1 4 8 16 2

    1 5

    3 5

    3 3

    【样例输出】

    4

    8

    8

    【数据范围及提示】

    40%的数据,N,Q ≤ 100;

    70%的数据,N ≤ 100;

    100%的数据,N ≤ 1000,Q ≤ 100000,序列中的元素为1到10^9之间的整数。

    源代码:
    
    #include<cstdio>
    int m,n,i[1001],h[1001];
    void qsort(int t1,int t2,int num) //改写快排。
    {
        int x=t1,y=t2,s=h[(t1+t2)/2],t;
        do
        {
            while (h[x]<s)
              x++;
            while (h[y]>s)
              y--;
            if (x<=y)
            {
                t=h[x];
                h[x]=h[y];
                h[y]=t;
                x++;
                y--;
            }
        }
        while (x<=y);
        if (x<t2&&t2>=num) //再怎么排序也不会影响结果了,故放弃处理。
          qsort(x,t2,num);
        if (t1<y&&t1<=num)
          qsort(t1,y,num);
    }
    int main()
    {
        scanf("%d%d",&n,&m);
        for (int a=1;a<=n;a++)
          scanf("%d",&i[a]);
        for (int a=1;a<=m;a++)
        {
            int t1,t2;
            scanf("%d%d",&t1,&t2);
            for (int a=t1;a<=t2;a++) //小白鼠数组。
              h[a]=i[a];
            qsort(t1,t2,(t1+t2)>>1);
            printf("%d
    ",h[(t1+t2)>>1]);
        }
        return 0;
    }
  • 相关阅读:
    问题:plugin with id 'android' not found
    问题:plugin with id 'android' not found
    【NYOJ】[122]Triangular Sums
    【NYOJ】[122]Triangular Sums
    【NYOJ】[113]字符串替换
    【NYOJ】[113]字符串替换
    【NYOJ】[111]分数加减法
    【NYOJ】[111]分数加减法
    【NYOJ】[101]两点距离
    【NYOJ】[101]两点距离
  • 原文地址:https://www.cnblogs.com/Ackermann/p/5560008.html
Copyright © 2011-2022 走看看