【HDU】5249-KPI(线段树+离散化)
好久没写线段树都不知道怎么写了。。。
很easy的线段树二分问题
#include<cstdio>
#include<set>
#include<queue>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
#define lson (pos<<1)
#define rson (pos<<1|1)
const int maxn = 10005;
int n,Case = 1;
char op[10];
int Hash[maxn];
int cnt;
struct In{
int op,v;
}in[maxn];
int HASH(int x){
return lower_bound(Hash,Hash + cnt,x) - Hash + 1;
}
int sum[maxn << 2];
void pushup(int pos){
sum[pos] = sum[lson] + sum[rson];
return;
}
void update(int L,int R,int m,int pos,int value){
if(L == R){
sum[pos] = value;
return;
}
int mid = (L + R) >> 1;
if(m <= mid)
update(L,mid,m,lson,value);
else
update(mid + 1,R,m,rson,value);
pushup(pos);
return;
}
int query(int L,int R,int value,int pos){
if(L == R)
return L;
int mid = (L + R) >> 1;
if(sum[lson] >= value)
return query(L,mid,value,lson);
else
return query(mid + 1,R,value - sum[lson],rson);
}
int main(){
while(scanf("%d",&n) != EOF){
printf("Case #%d:\n",Case++);
cnt = 0;
queue<int>q;
memset(sum,0,sizeof(sum));
for(int i = 0; i < n; i++){
scanf("%s",op);
if(op[0] == 'i'){
in[i].op = 1;
scanf("%d",&in[i].v);
Hash[cnt++] = in[i].v;
}
else if(op[0] == 'o')
in[i].op = 2;
else if(op[0] == 'q')
in[i].op = 3;
}
sort(Hash,Hash + cnt);
cnt = unique(Hash,Hash + cnt) - Hash;
for(int i = 0; i < n; i++){
if(in[i].op == 1){
int e = HASH(in[i].v);
q.push(e);
update(1,cnt,e,1,1);
}
else if(in[i].op == 2){
int e = q.front(); q.pop();
update(1,cnt,e,1,0);
}
else if(in[i].op == 3){
int f = sum[1];
int fx = f / 2 + 1;
int pos = query(1,cnt,fx,1);
printf("%d\n",Hash[pos - 1]);
}
}
}
return 0;
}
/*
10
in 1
in 2
in 3
in 4
in 5
o
q
o
q
q
*/
【HDU】5249-KPI(线段树+离散化)的更多相关文章
- HDU 4325-Flowers(线段树+离散化)
题意: 给出每个花开花的时间段,每询问一个时间点输出该时间点开花的数量 分析: 线段树的区间更新,单点查询,但发现时间很大,没法存区间,就想到了离散化. 离散化就是把要处理的数据统一起来重新标号. # ...
- HDU 1542 Atlantics 线段树+离散化扫描
将 x 轴上的点进行离散化,扫描线沿着 y 轴向上扫描 每次添加一条边不断找到当前状态有效边的长度 , 根据这个长度和下一条边形成的高度差得到一块合法的矩形的面积 #include<iostre ...
- POJ 1177/HDU 1828 picture 线段树+离散化+扫描线 轮廓周长计算
求n个图矩形放下来,有的重合有些重合一部分有些没重合,求最后总的不规则图型的轮廓长度. 我的做法是对x进行一遍扫描线,再对y做一遍同样的扫描线,相加即可.因为最后的轮廓必定是由不重合的线段长度组成的, ...
- HDU5124:lines(线段树+离散化)或(离散化思想)
http://acm.hdu.edu.cn/showproblem.php?pid=5124 Problem Description John has several lines. The lines ...
- POJ 2528 Mayor's posters(线段树+离散化)
Mayor's posters 转载自:http://blog.csdn.net/winddreams/article/details/38443761 [题目链接]Mayor's posters [ ...
- poj 2528 Mayor's posters(线段树+离散化)
/* poj 2528 Mayor's posters 线段树 + 离散化 离散化的理解: 给你一系列的正整数, 例如 1, 4 , 100, 1000000000, 如果利用线段树求解的话,很明显 ...
- [poj2528] Mayor's posters (线段树+离散化)
线段树 + 离散化 Description The citizens of Bytetown, AB, could not stand that the candidates in the mayor ...
- POJ 1151 / HDU 1542 Atlantis 线段树求矩形面积并
题意:给出矩形两对角点坐标,求矩形面积并. 解法:线段树+离散化. 每加入一个矩形,将两个y值加入yy数组以待离散化,将左边界cover值置为1,右边界置为2,离散后建立的线段树其实是以y值建的树,线 ...
- [UESTC1059]秋实大哥与小朋友(线段树, 离散化)
题目链接:http://acm.uestc.edu.cn/#/problem/show/1059 普通线段树+离散化,关键是……离散化后建树和查询都要按照基本法!!!RE了不知道多少次………………我真 ...
- poj 2528 Mayor's posters 线段树+离散化技巧
poj 2528 Mayor's posters 题目链接: http://poj.org/problem?id=2528 思路: 线段树+离散化技巧(这里的离散化需要注意一下啊,题目数据弱看不出来) ...
随机推荐
- C#重构经典全面汇总
C#重构经典全面汇总 1. 封装集合 概念:本文所讲的封装集合就是把集合进行封装,仅仅提供调用端须要的接口. 正文:在非常多时候,我们都不希望把一些不必要的操作暴露给调用端,仅仅须要给它所须要的操作 ...
- 高速掌握Lua 5.3 —— I/O库 (1)
Q:什么是"Simple Model"? A:全部的文件操作都基于一个默认的输入文件和一个默认的输出文件.这就意味着同一时间对于输入和输出来说,仅仅可操作一个文件(默认的文件). ...
- 通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?(转)
通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?(转) 一.总结 一句话总结:.NET是一个平台,包含多种语言,比如(C#.Visual Basic.C++/C ...
- PowerDesigner怎么调出工具箱?
PowerDesigner怎么调出工具箱? 如图操作:
- Chrome插件开发笔记
使用 XMLHttpRequest来抓取盗版小说网站里面的内容,但是注意需要在manifest.json文件中设置permission var xhr = new XMLHttpRequest();x ...
- GoldenGate 1403错误解决方法
OGG oracle goldengate 1403错误解决方法 1. 错误描述WARNING OGG-01154 Oracle GoldenGate Delivery for Oracle, re ...
- http://www.open-open.com/lib/tag/ReactiveCocoa
http://www.open-open.com/lib/tag/ReactiveCocoa
- Linux服务器性能评估与优化
一.影响务器性能因素 影响企业生产环境Linux服务器性能的因素有很多,一般分为两大类,分别为操作系统层级和应用程序级别.如下为各级别影响性能的具体项及性能评估的标准: (1)操作系统级别 内存: C ...
- 使用 init-runonce脚本创建一个 openstack云项目
source /etc/kolla/admin-openrc.sh cd /usr/share/kolla-ansible ./init-runonce 报错内容 Traceback (most re ...
- mesg---设置当前终端的写权限
mesg命令用于设置当前终端的写权限,即是否让其他用户向本终端发信息.将mesg设置y时,其他用户可利用write命令将信息直接显示在您的屏幕上. 语法 mesg(参数) 参数 y/n:y表示运行向当 ...