HDU 5249:KPI(权值线段树)
KPI
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
每组数据第一行有一个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",输出当前管道内重要值的中间值。
算法:权值线段树
题解:此题需要先离散化,然后根据权值线段树的特点,依次更新每个区间数的个数,然后根据个数查询即可,题中的拉取了管道头部,直接用队列模拟就好。
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <algorithm> using namespace std; const int maxn = 1e5+; struct query {
int op;
int val;
}Q[maxn]; struct tree {
int l, r, s;
}tree[maxn << ]; vector<int> v;
int n;
int len; int find(int x) {
return lower_bound(v.begin(), v.end(), x) - v.begin() + ;
} void init() {
sort(v.begin(), v.end());
v.erase(unique(v.begin(), v.end()), v.end());
len = v.size();
} void build(int root, int l, int r) {
tree[root].l = l;
tree[root].r = r;
tree[root].s = ;
if(l == r) {
return;
}
int mid = (l + r) >> ;
build(root << , l, mid);
build(root << | , mid + , r);
} void update(int root, int pos, int val) {
int l = tree[root].l;
int r = tree[root].r;
tree[root].s += val;
if(l == r) {
return;
}
int mid = (l + r) >> ;
if(pos <= mid) {
update(root << , pos, val);
} else {
update(root << | , pos, val);
}
} int query(int root, int k) {
int l = tree[root].l;
int r = tree[root].r;
if(l == r) {
return l;
}
int sum = tree[root << ].s;
if(sum >= k) {
return query(root << , k);
} else {
return query(root << | , k - sum);
}
} int main() {
int cas = ;
while(~scanf("%d", &n)) {
for(int i = ; i <= n; i++) {
char str[];
scanf("%s", str);
if(str[] == 'i') {
Q[i].op = ;
scanf("%d", &Q[i].val);
v.push_back(Q[i].val);
} else if(str[] == 'o') {
Q[i].op = ;
} else {
Q[i].op = ;
}
}
init();
build(, , len);
queue<int> que; //此队列模拟进出数据
printf("Case #%d:\n", ++cas);
for(int i = ; i <= n; i++) {
if(Q[i].op == ) {
int pos = find(Q[i].val);
update(, pos, );
que.push(pos);
} else if(Q[i].op == ) {
update(, que.front(), -);
que.pop();
} else {
int k = (que.size() / ) + ;
int pos = query(, k);
printf("%d\n", v[pos - ]);
}
}
}
return ;
}
HDU 5249:KPI(权值线段树)的更多相关文章
- R - Weak Pair HDU - 5877 离散化+权值线段树+dfs序 区间种类数
R - Weak Pair HDU - 5877 离散化+权值线段树 这个题目的初步想法,首先用dfs序建一颗树,然后判断对于每一个节点进行遍历,判断他的子节点和他相乘是不是小于等于k, 这么暴力的算 ...
- HDU 6609 离散化+权值线段树
题意 有一个长度为\(n\)的数组W; 对于每一个\(i\)(\(1<=i<=n\)),你可以选择中任意一些元素W[k] (\(1<=k<i\)),将他们的值改变为0,使得\( ...
- hdu 6703 array(权值线段树)
Problem Description You are given an array a1,a2,...,an(∀i∈[1,n],1≤ai≤n). Initially, each element of ...
- 2019年CCPC网络赛 HDU 6703 array【权值线段树】
题目大意:给出一个n个元素的数组A,A中所有元素都是不重复的[1,n].有两种操作:1.将pos位置的元素+1e72.查询不属于[1,r]中的最小的>=k的值.强制在线. 题解因为数组中的值唯一 ...
- 区间第k大问题 权值线段树 hdu 5249
先说下权值线段树的概念吧 权值平均树 就是指区间维护值为这个区间内点出现次数和的线段树 用这个加权线段树 解决第k大问题就很方便了 int query(int l,int r,int rt,int k ...
- HDU 6464 免费送气球 【权值线段树】(广东工业大学第十四届程序设计竞赛)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6464 免费送气球 Time Limit: 2000/1000 MS (Java/Others) M ...
- HDU - 2665 Kth number 主席树/可持久化权值线段树
题意 给一个数列,一些询问,问$[l,r]$中第$K$大的元素是哪一个 题解: 写法很多,主席树是最常用的一种之一 除此之外有:划分树,莫队分块,平衡树等 主席树的定义其实挺模糊, 一般认为就是可持久 ...
- HDU - 5592 ZYB's Premutation (权值线段树)
题意:给出序列前k项中的逆序对数,构造出这个序列. 分析:使用权值线段树来确定序列元素. 逆序对的数量肯定是递增的,从最后一个元素开始逆向统计,则\(a[i] - a[i-1]\)即位置i之前比位置i ...
- hdu 5592 ZYB's Premutation (权值线段树)
最近在线段树的世界里遨游,什么都能用线段树做,这不又一道权值线段树了么. ZYB's Premutation Time Limit: 2000/1000 MS (Java/Others) Mem ...
随机推荐
- C++实用模板 | 党办大活动计分
#include <iostream> #include <cmath> #include <cstring> #include <string> #i ...
- Python 入门 之 print带颜色输出
Python 入门 之 print带颜色输出 1.print带颜色输出书写格式: 开头部分: \033[显示方式; 前景色 ; 背景色 m 结尾部分: \033[0m 详解: 开头部分的三个参数: 显 ...
- 通过Playbook部署LAMP
Ansible的PlayBook文件格式为YAML语言,所以希望你在编写PlayBook前对YAML语法有一定的了解,否则在运行PlayBook的时候经常碰到语法错误提示,这里我们通过介绍批量部署LA ...
- 雷赛DMC2410_入门篇
研究了一下雷赛的运动控制卡,还是花了一点时间,总算把步进电机转起来了,现在把整个过程分享给大家. 雷赛板卡型号很多,这里选择的是DMC2410,主要在于他的性价比,其他型号应该也差不多同样的原理,套装 ...
- 简化SpringMVC配置
映射器处理器和适配器是可以省略的 为什么可以省略?因为有默认配置 SpringMVC的默认配置
- 03 Redis发布与订阅
以qq群的公告,单个发布者,多个收听者为例 发布/订阅 实验 发布订阅的命令 PUBLISH channel msg 将信息 message 发送到指定的频道 channel SUBSCRIBE ch ...
- vscode中外部引入js文件以及里面相应的方法
随便写一个js文件,定义一个方法名,并且在组件中进行引用就算成功 ###~js function shuchu(){ console.log(1) } export { shuchu }; ...
- (转)Python3.X如何下载安装urllib2包 ?
python 3.X版本是不需要安装:urllib2包的,urllib和urllib2包集合成在一个包了那现在问题是:在python3.x版本中,如何使用:urllib2.urlopen()? 答:i ...
- 2019-11-29-Roslyn-通过-NuGet-库修改应用程序入口函数
title author date CreateTime categories Roslyn 通过 NuGet 库修改应用程序入口函数 lindexi 2019-11-29 08:37:49 +080 ...
- zookeeper+activemq高可用集群搭建
一.准备工作: 准备三台机器:192.168.35.111192.168.35.112192.168.35.113 二.搭建zookeeper 三台机器上均要搭建zookeeper服务// 下载zoo ...