【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 思路: 线段树+离散化技巧(这里的离散化需要注意一下啊,题目数据弱看不出来) ...
随机推荐
- Canvas中的非零围绕规则原理
非零围绕规则:对于路径中指定范围区域,从该区域内部画一条足够长的线段.使此线段的全然落在路径范围之外. 非零围绕规则计数器:然后,将计数器初始化为0,每当这个线段与路径上的直线或曲线相交时,就改变计数 ...
- Vue小技巧,如何导入普通JS文件
最近在开发一个展示3D模型的WEB程序,在工程中使用了VUE和ThreeJS库.Three.js本身是支持CommonJS的,但我们还用到了OBJLoader模块,此模块不支持CommonJS,改成C ...
- bzoj1296: [SCOI2009]粉刷匠(DP)
1296: [SCOI2009]粉刷匠 题目:传送门 题解: DP新姿势:dp套dp 我们先单独处理每个串,然后再放到全局更新: f[i][k]表示当前串枚举到第i个位置,用了k次机会 F[i][j] ...
- BZOJ 3123 主席树 启发式合并
思路: 主席树 搞树上的k大 x+y-lca(x,y)-fa(lca(x,y)) 按照size小树往大树上插 启发式合并 n*log^2n的 搞定~ //By SiriusRen #include & ...
- BZOJ 2251 Trie树
思路: i~n加到Trie树里 经过的边权+1 DFS一遍 搞定~ //By SiriusRen #include <cstdio> #include <cstring> #i ...
- PostgreSQL备份与还原
物理备份:整个数据库的数据目录及文件做备份:备份整个数据库的文件系统. 物理恢复:恢复整个数据库的文静系统. 物理备份方法: 开启归档 select pg_start_backup('backup—— ...
- centos7 安装 Python netsnmp模块
由于模块的安装过程中有点艰难(其实挺简单,只是参照网上的教程很多都装不成功,花了很多时间...),所以记下来备忘. 先装一下python-devel 模块,执行命令 yum install pytho ...
- 2017国家集训队作业[agc016b]Color Hats
2017国家集训队作业[agc016b]Color Hats 题意: 有\(N\)个人,每个人有一顶帽子.帽子有不同的颜色.现在,每个人都告诉你,他看到的所有其它人的帽子共有多少种颜色,问有没有符合所 ...
- CF37E Trial for Chief(最短路)
题意 题意是给你一张 NMNMNM 的图,每个点有黑色和白色,初始全为白色,每次可以把一个相同颜色的连续区域染色,求最少的染色次数:(n,m<=50) 题解 转化为最短路.对于每一个点与它相邻的 ...
- users---显示当前登录系统的所有用户的用户列表
users命令用于显示当前登录系统的所有用户的用户列表.每个显示的用户名对应一个登录会话.如果一个用户有不止一个登录会话,那他的用户名将显示相同的次数. 语法 users(选项) 选项 --help: ...