NYOJ 删除元素
来源:互联网 发布:2017淘宝网下载 编辑:程序博客网 时间:2024/05/16 11:35
删除元素
时间限制:1000 ms | 内存限制:65535 KB
- 描述
题意很简单,给一个长度为n的序列,问至少删除序列中多少个数,使得删除后的序列中的最大值<= 2*最小值
- 输入
- 多组测试数据,每组测试数据包含两行。
第一行一个整数n( n <= 10^5),序列中元素的个数。
第二行依次输入n个数a1,a2……an,(1 <= ai <= 10^9)以空格分开。 - 输出
- 输出占一行,至少要删除数的个数。
- 样例输入
65 4 3 3 8 6
- 样例输出
1
- 来源
- 飘谊系列
- 上传者
PIAOYI
一个O(nlogn)算法,一个O(n)算法
#include<iostream>#include<algorithm>#include <cstdio>#include <cstring>using namespace std;const int MAXN = 100010;struct delNum { int n,ans; int str[MAXN]; void init() { ans = -1; } void readNum() { for(int i=0; i<n; i++) { scanf("%d",&str[i]); } } void deal_nlogn(){//O(nlogn)的时间复杂度,随便调用哪个 sort(str,str+n); for(int i = 0; i < n; i++) { int tmp = str[i]*2; if(tmp > str[n-1]) {tmp = n;} else tmp = binarySearch(tmp); ans = max(ans,tmp - i); } } void deal_n(){//O(n)的时间复杂度 sort(str,str+n); for(int i = 0, k = 0; i < n; i++) { while(k < n && str[k] <= 2*str[i])k++; if(k-i>ans)ans = k-i; } } int binarySearch(int doubleNum) { int l = 0, r = n-1; while(l <= r) { int mid = (l+r)>>1; if(doubleNum == str[mid]) { while(str[++mid] == doubleNum); return mid; } if(str[mid] > doubleNum && str[mid-1] < doubleNum) { return mid; } if(str[mid] > doubleNum) { r = mid; } else { l = mid+1; } } return -1; }}test;int main() { //freopen("F:\\in.txt","r",stdin); while(~scanf("%d",&test.n)) { test.init(); test.readNum(); test.deal_nlogn();//test.deal_n(); printf("%d\n",test.n - test.ans); } return 0;}
- nyoj 删除元素
- NYOJ 删除元素
- nyoj 776-删除元素
- nyoj 删除元素
- NYOJ练习题 删除元素(二分查找)
- NYOJ 776 删除元素(二分查找)
- NYOJ 查找最大元素
- 删除元素.
- 删除元素
- 删除元素
- 删除元素
- 删除元素
- 删除元素
- 删除元素
- 删除元素
- 删除元素
- 删除元素
- 删除元素
- SDL 和SDL_TTF 联合实现 Video Player 加OSD
- java中print,printf,println区别
- 快速生成树协议(Rapid STP,RSTP)
- 安装redhat时中文显示乱码(小方框)及中文输入法安装解决方法
- 对于大流量的网站,采用什么样的方法来解决访问量问题---见解
- NYOJ 删除元素
- 概率随机问题【2】 取样与概率
- poj 1785 Binary Search Heap Construction(笛卡尔树)
- 思维导图与UML之ContentProvider
- java 23种设计模式
- Linux下USB驱动框架分析
- JavaScript部分事件 很时用!
- 字符映射表 charmap
- 没事偷着乐