随时查找中位数——pat1057
http://pat.zju.edu.cn/contests/pat-a-practise/1057
题目的意思是可以在一个可以任意添加于删除整数的集合里随时查找该集合的中位数
每次查找用nlogn的方法显然会超时
所以要一种方法接近0(N)的查找方法, ( 计算第k大的数会超时!!)
比如当前有1,4,7
则树状数组的sum结果会是 1,1,1,2,2,2,3
现在就变成了二分查找(3+1)/2 ,即2的最左端的位置
ps: 2分查找有两种形式 (有一种会出错)
int find(int value)// 1,2,3
{
int mid,ll=,rr=;
while(ll<=rr)
{
mid=(ll+rr)/;
if(value<=s[mid])rr=mid-;
else ll=mid+;
}
return ll;
}
这种查找1,2,3都不会出错
int find(int value)//1,2,3
{
int mid,ll=,rr=;
while(ll<rr-)
{
mid=(ll+rr)/;
if(value<=s[mid])rr=mid;
else ll=mid;
}
return rr;
}
这种查找1是会出错!!!
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<stack>
using namespace std; int n=;
int tree[];
int add[];
int size=; int lowbit(int x)
{
return x&(-x);
} void updata(int x,int c)
{
int i;
for(i=x;i<=n;i+=lowbit(i))
{
tree[i]+=c;
}
} int getsum(int x)
{
int i;
int temp=;
for(i=x;i>=;i-=lowbit(i))
{
temp+=tree[i];
}
return temp;
} int find()
{
int ll=,rr=,mid=(ll+rr)/; int sum;
while(ll<=rr){
mid=(ll+rr)/;
sum=getsum(mid);
if(sum< ((size+)/)) ll=mid+;
else if(sum> ((size+)/)) rr=mid-;
else if(sum == ((size+)/)) rr=mid-;
}
return ll;
} int main()
{
int t;
scanf("%d",&t);
int i,temp;
char ss[];
stack<int>sta;
for(i=;i<=n;i++){
tree[i]=;
add[i]=;
} for(i=;i<=t;i++){
scanf("%s",ss);
if(ss[]=='p'){
if(size==){
printf("Invalid\n");
}else{
printf("%d\n",sta.top());
updata(sta.top(),-);
add[sta.top()]--;
sta.pop();
size--;
}
} if(ss[]=='s'){
scanf("%d",&temp);
add[temp]++;
sta.push(temp);
updata(temp,);
size++;
} if(ss[]=='e'){
if(size==){
printf("Invalid\n");
}else{
printf("%d\n",find());
}
}
} return ;
}
随时查找中位数——pat1057的更多相关文章
- 求中位数,O(n)的java实现【利用快速排序折半查找中位数】
查找无序数组的中位数,要想时间复杂度为O(n)其实用计数排序就能很方便地实现,在此讨论使用快速排序进行定位的方法. 1.中位数定义 2.算法思想 3.Java代码实现 4.时间复杂度分析 5.附录 中 ...
- LeetCode 4 Median of Two Sorted Arrays 查找中位数,排除法,问题拓展 难度:1
思路:设现在可用区间在nums1是[s1,t1),nums2:[s2,t2) 1.当一个数组可用区间为0的时候,由于另一个数组是已经排过序的,所以直接可得 当要取的是最小值或最大值时,也直接可得 2. ...
- Google 面试题:Java实现用最大堆和最小堆查找中位数 Find median with min heap and max heap in Java
Google面试题 股市上一个股票的价格从开市开始是不停的变化的,需要开发一个系统,给定一个股票,它能实时显示从开市到当前时间的这个股票的价格的中位数(中值). SOLUTION 1: 1.维持两个h ...
- 题目1004:Median(查找中位数)
问题来源 http://ac.jobdu.com/problem.php?pid=1004 问题描述 给你两个非降序序列,让你求中位数.中位数为第(n+1)/2个数(从0开始计算). 问题分析 这个问 ...
- 可以随时查找的max栈和max队列——面试
这是面试中比较常见的题目,max队列也是编程之美里的一道题 对于max的栈,有个比较简单的办法就是,每次入栈前判断栈顶元素与正在入栈的元素哪个大,哪个大就哪个入栈 对于队列,我们知道可以用两个栈来实现 ...
- 查找第K小的元素(利用中位数线性时间选择)(C)
找任意第k个小的元素 #include <stdio.h> #include <stdlib.h> #include <ctime> #include <io ...
- 在一个文件中有10G个整数,乱序排列,要求找出中位数
题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数.内存限制为 2G.只写出思路即可(内存限制为 2G的意思就是,可以使用2G的空间来运行程序,而不考虑这台机器上的其他软件的占用内存). ...
- 腾讯面试题:10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。
腾讯面试题:10G 个整数,乱序排列,要求找出中位数.内存限制为 2G. 题目和基本思路都来源网上,本人加以整理. 题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数.内存限制为 2G.只 ...
- 10G整数,找出中位数
摘自: http://www.cnblogs.com/avril/archive/2012/04/20/2460805.html http://blog.csdn.net/flyinghearts/a ...
随机推荐
- how to create an asp.net web api project in visual studio 2017
https://docs.microsoft.com/en-us/aspnet/web-api/overview/getting-started-with-aspnet-web-api/tutoria ...
- 快速将对象转化为JSON格式
1.导入阿里巴巴fastjson包. <!-- fastJson将对象转化为Json对象 --> <dependency> <groupId>com.alibaba ...
- hdu 5768 Lucky7 中国剩余定理+容斥+快速乘
Lucky7 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem D ...
- NFS的安装配置使用
/////////////////////////////NFS///////////////////////////////////////////////////写在前面:NFS在数据传输/信息传 ...
- Prism技术开发文档(五星级)
转自csdn博客园:http://blog.csdn.net/albert528108/article/details/52122547
- HyperV创建NAT网络
创建NAT内部网络,使用PowerShell完成. https://docs.microsoft.com/zh-cn/virtualization/hyper-v-on-windows/user-gu ...
- 四十八 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索功能
Django实现搜索功能 1.在Django配置搜索结果页的路由映射 """pachong URL Configuration The `urlpatterns` lis ...
- YCSB benchmark测试cassandra性能——和web服务器测试性能结果类似
转自:http://www.itdadao.com/articles/c15a531189p0.html http://www.cnblogs.com/bettersky/p/6158172.html ...
- ViewGroup的事件分发机制
我们用手指去触摸Android手机屏幕,就会产生一个触摸事件,但是这个触摸事件在底层是怎么分发的呢?这个我还真不知道,这里涉及到操作硬件 (手机屏幕)方面的知识,也就是Linux内核方面的知识,我也没 ...
- HData——ETL 数据导入/导出工具
HData是一个异构的ETL数据导入/导出工具,致力于使用一个工具解决不同数据源(JDBC.Hive.HDFS.HBase.MongoDB.FTP.Http.CSV.Excel.Kafka等)之间数据 ...