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

    2021 中庸之道

     

     时间限制: 1 s
     空间限制: 128000 KB
     题目等级 : 钻石 Diamond
     
     
     
    题目描述 Description

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

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

    输入描述 Input Description

    第一行为N,Q。

    第二行N个数表示序列。

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

    输出描述 Output Description

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

    样例输入 Sample Input

    5 3

    1 4 8 16 2

    1 5

    3 5

    3 3

    样例输出 Sample Output

    4

    8

    8

    数据范围及提示 Data Size & Hint

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

    70%的数据,N≤100;

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

    分类标签 Tags 

     
    枚举 递推 数论
     
     1 //不用主席树
     2 #include<cstdio>
     3 #include<algorithm>
     4 using namespace std;
     5 const int maxn=10010;
     6 int a[maxn],d[maxn];
     7 int n,m,b,c;
     8 void kp(int x,int y)
     9 {
    10     int l=x,r=y,mid=a[l+r>>1];
    11     do
    12     {
    13         while(a[l]<mid) l++;
    14         while(a[r]>mid) r--;
    15         if(l<=r)
    16         {
    17             swap(a[l],a[r]);
    18             l++;r--;
    19         }
    20     }while(l<=r);
    21     if(l<=((b+c)/2)) kp(l,y);
    22     if(r>=((b+c)/2)) kp(x,r);
    23 }
    24 int main()
    25 {
    26      scanf("%d%d",&n,&m);
    27      for(int i=1;i<=n;i++) scanf("%d",a+i);
    28      for(int i=1;i<=n;i++) d[i]=a[i];
    29      for(int i=1;i<=m;i++)
    30      {
    31          scanf("%d%d",&b,&c);
    32         kp(b,c);
    33         printf("%d
    ",a[b+c>>1]);
    34         for(int i=1;i<=n;i++)
    35             a[i]=d[i];
    36      }
    37      return 0;
    38 }
  • 相关阅读:
    PHP string
    MUI体验框架
    OPP面向对象的介绍及使用
    分享一个实用插件(页面滚动触发动画)以及其内部的所有动画属性值
    对于Bootstrap的介绍以及如何使用
    JS中的内置对象简介与简单的属性方法
    如何使用JS实现banner图滚动
    如何用JavaScript制作循环图形
    javascript高级程序设计阅读总结
    读心术小游戏
  • 原文地址:https://www.cnblogs.com/EvilEC/p/5850622.html
Copyright © 2011-2022 走看看