最小值
来源:互联网 发布:无线键盘推荐 知乎 编辑:程序博客网 时间:2024/05/22 19:04
最小值
时间限制:1000 ms | 内存限制:65535 KB
难度:3
描述
输入N个数,M次查询。
每次查询给出一个数x。
要求:每次查询输出前x个数中第i小的数。(i为第i次查询)
你可以假设M <= N,Xi <= Xi+1 <= Xi+2 <= ……. <= Xm (Xm <= N).
输入
Line0:T
Line1: N,M
Line2…LineN+1:num1,……,numN
LineN+2…LineN+2+M:x1,……,xM
N < 30000, num < 2000000000
输出
每次查询输出前i小的数,单独一行。
详细格式请参考样例。
样例输入
1
7 4
3 1 -4 2 8 -1000 2
1 2 6 6
样例输出
3
3
1
2
分析:
在状态不好的时候想写写水题放松一下。一看难度为三就选了这题。结果被坑了。。。
方法一:没有看到你可以假设M <= N,Xi <= Xi+1 <= Xi+2 <= ……. <= Xm (Xm <= N).这个条件,认为x的顺序可以任意。所以为了节约一点时间就想到了用快排的思想求第k小值。辅助数组p[]保存0~x-1的值。(很费时间,可以想下其他方法)。
#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int maxn = 30010;int a[maxn];int p[maxn];int mypartion(int x,int y){ int i=x,j=y,t; while(i<j) { while(i<j) { if(p[j]>=p[i]) j--; } if(i<j) { t=p[i]; p[i]=p[j]; p[j]=t; i++; } while(i<j) { if(p[i]<=p[j]) i++; } if(i<j) { t=p[i]; p[i]=p[j]; p[j]=t; j--; } } return i;}int ksort(int x,int y,int k){ int middle = mypartion(x,y); if(middle==k) return p[middle]; else if(middle<k) { return ksort(middle+1,y,k); } else return ksort(x,middle-1,k);}int main(){ freopen("input.in","r",stdin); int t,n,m,x; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); for(int i=0;i<n;i++) scanf("%d",&a[i]); for(int i=0;i<m;i++) { scanf("%d",&x); for(int j=0;j<x;j++) p[j]=a[j]; int ans =ksort(0,x-1,i); printf("%d\n",ans); } } return 0;}
方法2:看到你可以假设M <= N,Xi <= Xi+1 <= Xi+2 <= ……. <= Xm (Xm <= N).这个条件后,前面顺序被更改不影响后面的查询,所以每次可以直接sort()然后输出第i个就可以了。
#include <iostream>#include <cstring>#include <algorithm>#include <cstdio>using namespace std;const int maxn = 30010;int a[maxn],b;int main(){ int t,n,m; scanf("%d",&t); while(t { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=m;i++) { scanf("%d",&b); sort(a+1,a+b+1); printf("%d\n",a[i]); } } return 0;}
1 0
- 最小值
- 最小值
- 最小值
- 最小值
- 最小值
- div最小值
- 最大值&最小值
- 最大值-最小值
- 求最小值
- java 最小值
- 最小值最大化
- 最小值优先
- 最大值,最小值
- 区间最小值
- 最大最小值
- 最大值最小值
- 求最小值
- 找最小值
- zip压缩打包文件下载
- solr5.5.2 在windows下设置默认时区
- android Activity管理类(全局管理Activity)
- spring注解概要
- ubuntu 14.04 配置 fabric
- 最小值
- mysql中limit用法详解
- RecyclerView详解+示例介绍
- C/C++面试题集锦
- Spring Redis基本使用
- spring&junit
- 服务器推送之WebSocket 入门学习路程(二)
- Android之如何打开系统相机
- Eclipse中使用SVN