HDU 5249 离线树状数组求第k大+离散化
KPI
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1160 Accepted Submission(s): 488
每组数据第一行有一个n(1≤n≤10000)
,代表服务记录数。
接下来有n行,每一行有3种形式
"in x": 代表重要值为x(0≤x≤109)
的请求被推进管道。
"out": 代表服务拉取了管道头部的请求。
"query: 代表我想知道当前管道内请求重要值的中间值. 那就是说,如果当前管道内有m条请求, 我想知道,升序排序后第floor(m/2)+1th
条请求的重要值.
为了让题目简单,所有的x都不同,并且如果管道内没有值,就不会有"out"和"query"操作。
Case #i:
然后每一次"query",输出当前管道内重要值的中间值。
in 874
query
out
in 24622
in 12194
query
874
24622
#include<iostream>
#include<cstring>
#include<cstdio>
#include<map>
#include<algorithm>
#include<stack>
#include<queue>
using namespace std;
struct node
{
int x;
int y;
} s[];
int t;
int jishu=;
char a[][];
int b[];
int exm;
int f[];
int coun=;
map<int,int> mp;
map<int,int> mpp;
queue<int> st;
int n;
bool cmp(struct node aa,struct node bb )
{
return aa.x<bb.x;
}
void add(int x,int y,int n)
{
for (;x<=n;x+=x&(-x)) f[x]+=y;
}
int sum(int x)
{
int ret=;
for (;x;x-=x&(-x)) ret+=f[x];
return ret;
}
int find_k(int k) //求第k大 板子
{
int i,w=;
for (i=;i>=;i--)
if (w+(<<i)<=n&&f[w+(<<i)]<k)
{
k-=f[w+(<<i)];w+=<<i;
}
return w+;
}
int k_num(int k){
int w=,cnt=;
for(int i=;i>=;i--)
{ w+=(<<i);
if(w>n || k<=f[w])
w-=(<<i);
else
{
k-=f[w];
}
}
return w+;
}
int main()
{
while(scanf("%d",&t)!=EOF)
{ jishu++;
memset(s,,sizeof(s));
memset(a,,sizeof(a));
memset(b,,sizeof(b));
memset(f,,sizeof(f));
mp.clear();
mpp.clear();
while(st.size()>)
st.pop();
coun=;
for(int i=;i<=t;i++)
{
scanf("%s",&a[i]);
if(a[i][]=='i')
{
scanf("%d",&exm);
s[++coun].x=exm;//存插入的元素
s[coun].y=coun;//struct 存储对应位置
}
}
cout<<"Case #"<<jishu<<":"<<endl;
sort(s+,s++coun,cmp);//结构体排序 x为主键升序排列
b[s[].y]=;
int k=;
mp[s[].x]=;
mpp[]=s[].x;
for(int i=;i<=coun;i++)//for循环完成离散化处理
{
if(s[i].x==s[i-].x)
{
b[s[i].y]=k;
mp[s[i].x]=k;// 与元素的相互映射
mpp[k]=s[i].x;//
}
else
{
b[s[i].y]=++k;
mp[s[i].x]=k;
mpp[k]=s[i].x;
}
}
n=k;
k=;
for(int i=;i<=t;i++)
{
if(a[i][]=='i')
{
st.push(mpp[b[++k]]);
add(b[k],,n);
}
if(a[i][]=='o')
{
int now=st.front();
st.pop();
add(mp[now],-,n);
}
if(a[i][]=='q')
{
int len=st.size();
int location=k_num((len/)+);
printf("%d\n",mpp[location]); }
}
}
return ;
}
/*
10
in 3
in 1
out
in 4
query
in 2
out
in 100
in 1
query
*/
HDU 5249 离线树状数组求第k大+离散化的更多相关文章
- poj 2985 The k-th Largest Group 树状数组求第K大
The k-th Largest Group Time Limit: 2000MS Memory Limit: 131072K Total Submissions: 8353 Accepted ...
- POJ2985 The k-th Largest Group[树状数组求第k大值+并查集||treap+并查集]
The k-th Largest Group Time Limit: 2000MS Memory Limit: 131072K Total Submissions: 8807 Accepted ...
- 树状数组求第K大(From CLJ)
; <<log2[n];p;p>>=) if(a[ret+p]<=kth) kth-=a[ret+=p]; return ret;
- hdu 4217 Data Structure? 树状数组求第K小
Data Structure? Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- 树状数组求第k小的元素
int find_kth(int k) { int ans = 0,cnt = 0; for (int i = 20;i >= 0;i--) //这里的20适当的取值,与MAX_VAL有关,一般 ...
- 区间的关系的计数 HDU 4638 离线+树状数组
题目大意:给你n个人,每个人都有一个id,有m个询问,每次询问一个区间[l,r],问该区间内部有多少的id是连续的(单独的也算是一个) 思路:做了那么多离线+树状数组的题目,感觉这种东西就是一个模板了 ...
- HDU - 4777 离线树状数组
离线树状数组搞一搞. #include<bits/stdc++.h> #define LL long long #define fi first #define se second #de ...
- HDU 4417 离线+树状数组
Super Mario Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- UVA11525 Permutation[康托展开 树状数组求第k小值]
UVA - 11525 Permutation 题意:输出1~n的所有排列,字典序大小第∑k1Si∗(K−i)!个 学了好多知识 1.康托展开 X=a[n]*(n-1)!+a[n-1]*(n-2)!+ ...
随机推荐
- 【paging_Class 分页类】使用说明
类名:paging_Class 说明:分页类 注意: 1) 支持百万级数据分页 2) 支持多种类型的SQL语法,比如 Left Join 等. 3) 自动保存查询中的错误情况,记录保存在:/Cache ...
- 三个线程ABC,交替打印ABC
转载与:https://www.cnblogs.com/x_wukong/p/4009709.html 创建3个线程,让其交替打印ABC . 输出如下: ABCABCABCABC. 方法:使用syn ...
- Java学习 · 初识 异常机制
异常机制 1. 程序中的异常 a) b) 面对异常如何解决 i. 由开发者通过if-else来解决 代码臃肿 程序员需要花费很大精力 ii. ...
- ajax 和 mock 数据
ajax ajax是一种技术方案,但并不是一种新技术.它依赖的是现有的CSS/HTML/Javascript,而其中最核心的依赖是浏览器提供的XMLHttpRequest对象,是这个对象使得浏览器可以 ...
- POJ 2987 Firing(最大流最小割の最大权闭合图)
Description You’ve finally got mad at “the world’s most stupid” employees of yours and decided to do ...
- 11.24Daily Scrum(4)
人员 任务分配完成情况 明天任务分配 王皓南 实现网页上视频浏览的功能.研究相关的代码和功能.1007 实现视频浏览的功能 申开亮 实现网页上视频浏览的功能.研究相关的代码和功能.1008 实现视频浏 ...
- 让我们一起来做最漂亮的Android界面吧!
让我们一起来做最漂亮的Android界面吧! AndroidiOS产品设计 摘要:如何为Android设备量身定制以打造出最为完美的应用?这是让诸多开发者很是头疼的问题.不同于iOS,Android设 ...
- Java Class Object
Object类 它是所有类的基类. public class Person { } //实际上是 public class Person extends Object { } Object类的方法 t ...
- UBUNTU如何安装tar.gz版的flash
adobe flash player的官方下载页面为:https://get.adobe.com/cn/flashplayer/ 不过近期通过APT方式以及ubuntu的软件中心都安装不了flashp ...
- phpcms v9 thumb(缩略图) 函数说明
打开phcmsc/libs/functions/global.func.php文件,找到如下代码:/** * 生成缩略图函数 * @param $imgurl 图片路径 * @param $wid ...