pat-1057 Stack 树状数组+二分查找
题意
给我们一个n表示操作数量 然后三种操作
push和pop 还有求中位数的操作
让我们根据操作输出正确的解
分析
用sort排序做 或者 map标记法都会超时
考虑更快的方法
如何快速找到给定一串数的中位数
可以去索引 但是需要排序
题目中告诉我们每个元素都小于1e5
那么也就是说 上下界已知
那么求中位数 也就是求小于等于某个数的个数正好为所有数的一半
那么求小于等于某个数的个数 可以用树状数组去记录
然后查中位数时 在树状数组中二分小于等于的个数mid的元素的下界
树状数组可以用来统计小于等于某元素的数量
code
#include<bits/stdc++.h>
using namespace std;
/*树状数组中记录的是小于当前元素的数量 由于树状数组符合单调性 所以可以二分这个容量的中间值
*/
char a[20];
int c[100003];
vector<int>s;
void add(int x,int i){while(x<=100000){c[x]+=i;x+=x&(-x);}
}
int sum(int x){ //统计小于x的数量 int ans = 0;while(x){ans+=c[x];x-=x&(-x);}return ans;
}
int find(int md){int l = 0,r = 100000,mid,ans;while(l<=r){//二分查找小于等于mid元素的数量 mid = l+r>>1;int ss = sum(mid);if(ss>=md)r = mid-1;else l = mid+1;} return l;
}
int main()
{int n;scanf("%d",&n);while(n--){scanf("%s",a);if(a[1]=='o'){if(s.size()==0){puts("Invalid");continue;}printf("%d\n",s[s.size()-1]);add(s[s.size()-1],-1);s.pop_back();}else if(a[1]=='u'){int val;scanf("%d",&val);add(val,1);s.push_back(val); } else{if(s.size()==0){puts("Invalid");continue;}int f = s.size()+1>>1;printf("%d\n",find(f));}}return 0;
}
pat-1057 Stack 树状数组+二分查找相关推荐
- hdu(4339)树状数组+二分查找
/* s1[i]与s2[i]匹配,树状数组i位置更新1,否则更新0.*/#include<stdio.h> #include<string.h> #include<alg ...
- VK Cup 2012 Qualification Round 2 C. String Manipulation 1.0 线段树 or 树状数组+二分
http://codeforces.com/problemset/problem/159/C 题意: 给你一个字符串s,给出一个数k,k倍的s串组成新串str.然后给出n个操作,每个操作对应着pi,c ...
- P2161 [SHOI2009]会场预约[线段树/树状数组+二分/STL]
题目描述 PP大厦有一间空的礼堂,可以为企业或者单位提供会议场地.这些会议中的大多数都需要连续几天的时间(个别的可能只需要一天),不过场地只有一个,所以不同的会议的时间申请不能够冲突.也就是说,前一个 ...
- POJ2828 Buy Tickeys 树状数组+二分 线段树留坑。。。
题意:一堆人排队买票,告诉你一堆人的序号(序号的意思是插在"当前"第几个人的后面)和姓名(姓名用编号代替). 思路:线段树 或 树状数组+二分(自己还不会线段树,所以这里继续留坑) ...
- 树状数组 + 二分 - Query HDU - 4339
树状数组 + 二分 - Query HDU - 4339 题意: T组测试用例,每组给定两个长度分别为l1和l2的字符串s1,s2.有两种询问:①.1idic:将第id个字符串的第i个字符变成字符c. ...
- [HDU - 2852] KiKi's K-Number (树状数组+二分)
链接 http://acm.hdu.edu.cn/showproblem.php?pid=2852 题意 现在需要你对一个空序列做nnn次操作,操作分三种 0x0\ \ x0 x :向序列中加入一个 ...
- D. Multiset(树状数组 + 二分)
Multiset 可能更好的阅读体验 思路 二分 + 树状数组做法 我们发现每个数的范围是$ <= 1e6$的,所以可以直接在线操作,不用离散化离线操作. 这个时候我们的treetreetree ...
- L3-002 堆栈 树状数组+二分答案
题目详情点击这里 思路:用std::stack来表示题目中说的栈,现在关键问题就是如何找到中位数. 可以用二分答案+树状数组的方法 由于每个元素最大不超过1e5,因此开一个大小为1e5的树状数组来存储 ...
- HDU 2852 KiKi's K-Number (树状数组+二分)
题意: 给出一些操作: 0 x 在数组中加入一个数x 1 x 在数组中去掉一个数x 2 a k 在数组中查询比a大的第k小数 分析: 首先看到题目的数据范围 e<100000 ,发现数组完全可以 ...
最新文章
- 德国最有影响力的数学家(上)
- python编程课程上课有用吗-Python培训网络课堂|Python编程软件有哪些功能?
- 我是如何拿到蚂蚁金服 offer ?
- linux ie8找不到,ie浏览器不见了怎么办 三种方法搞定【图文教程】
- 我的性格是外向型,解决问题导向的
- RequireJS 主要函数
- ObjecT4:On-line multiple instance learning (MIL)学习
- 10进制转换16进制补足0_信息技术教师资格必考内容——进制换算(一)
- 一般是一个较为复杂的 飞鸽传书 对象
- 搜狗2011笔试题+答案解析
- 面试题 03.02. 栈的最小值
- servlet 同版本对应的Tomcat版本 ,不同版本的web.xml写法
- HttpURLConnection的使用步骤
- PowerEdge r730xd 安装centos 6.7
- win7多国语言包下载与安装
- 2021研究生数学建模B题,空气质量检测
- Python——百度识图-相似图片爬虫下载解决方案
- 如何在WordPress中使用SEO写作助手来改善SEO
- 技能梳理25@stm32+adxl345+电机震动+串口输出
- 设计,构建线框图和对Android应用进行原型制作:第1部分
热门文章
- EF6 如何判断DataContext有修改,以及如何放弃修改
- hasLayout和filter滤镜的细节
- mysql事务模式怎么查_Mysql InnoDB中的查询事务模式与锁定select ..for update
- Android 微信登录
- C# 系统环境变量读取
- csv mysql_将csv的数据导入mysql
- dos安装深度linux,U盘用grub4dos引导Deepin v20 Beta iso安装的方法
- hadoop join
- 《java程序员修炼之道》pdf书籍
- [SimplePlayer] 2. 在屏幕上显示视频图像