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 ...
随机推荐
- jQuery Mobile Slider Widget 使用js控制
jQuery Mobile 滑动条控件 基本用法不用多说了,看这里: http://www.runoob.com/jquerymobile/jquerymobile-form-sliders.html ...
- 开发MT4连接失败最easy忽视的一个错误
m_factory.WinsockStartup();
- 稀疏矩阵三元组快速转置(转poklau123写的很清楚)
关于稀疏矩阵的快速转置法,首先得明白其是通过对三元表进行转置.如果误以为是对矩阵进行转置,毫无疑问就算你想破脑袋也想不出个所以然,别陷入死胡同了! 对于一个三元表,行为i,列为j,值为v.需将其i与j ...
- Jquery 控制table中的checkbox 相关选中事件
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- JavaScript金字塔打印
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Vue与Angular以及React的三者之间的区别
1.与AngularJS的区别 相同点:都支持指令:内置指令和自定义指令:都支持过滤器:内置过滤器和自定义过滤器:都支持双向数据绑定:都不支持低端浏览器. 不同点:AngularJS的学习成本高,比如 ...
- a标签的download属性
a标签加上downlaod属性后,就可完成对href属性链接文件的下载,但仅仅是限于同源文件,如果是非同源,download属性会失效. 无download属性的时候,a标签的默认行为是链接跳转进行预 ...
- iOS去掉字符串中的HTML标签的方法
方法一.NSScanner去除标签 - (NSString *)removeTheHtmlFromString:(NSString *)htmlString { NSScanner * scanner ...
- 【项目构建工具】 Gradle笔记2
一.Gradle执行流程 1.Gradle的执行流程(生命周期)主要是三个阶段: 初始化阶段:解析整个工程中所有Project,构建所有的Project对应的project对象 配置阶段:解析所有的p ...
- Centos7.0 三种网络适配器
VMnet0:桥接模式 VMnet1:主机模式 VMnet8:NAT模式 VMware Network Adepter VMnet1:宿主Host用于与 主机模式 虚拟网络进行通信的虚拟网卡 VMwa ...