这个是去年astar的题~

标准做法主席树,然而渣渣并不会(我确实叫zhazha。。。),

所以,他先离线,离散化,然后树状数组+二分水过了。。。。

离线的目的主要是为了离散化,剩下的就和用一个树状数组维护一个数之前有多少个数比他小差不多~~

二分答案+树状数组求和判断即可,注意二分何时终止~~(复杂度O(nlognlogn))

 #include <bits/stdc++.h>

 using namespace std;
const int maxn = + ;
int n, a[maxn], input[maxn], c[maxn];
char str[maxn][]; int flag[maxn]; map<int, int> mp; inline int lowbit(int x){
return x & (-x);
} int sum(int x){
int ret = ;
while(x > ){
ret += c[x];
x -= lowbit(x);
}
return ret;
} void add(int x, int d){
while(x <= n){
c[x] += d;
x += lowbit(x);
}
} void solve(int p){
int left = , right = n+; while(left+<right){
int mid = (left + right)/;
int sum1 = sum(mid);
//cout << "mid: " << mid << " sum: " << sum1 << endl; if( sum1 > p ){
right = mid;
}else if( sum1 < p ){
left = mid;
}else{
if(flag[mid] == ){
printf("%d\n", a[mid]);
return;
}else{
right = mid;
}
}
}
} queue<int> q; int main(void){
int cas = ;
while(scanf("%d", &n) != EOF){
int len = , num;
for(int i = ; i < n; ++i){
scanf("%s", str[i]);
if(str[i][] == 'i'){
scanf("%d", &num);
input[++len] = num;
a[len] = num;
}
} //离散化
sort(a+, a+len+);
mp.clear();
for( int i = ; i <= len; ++i ){
mp[a[i]] = i;
} memset(c, , sizeof(c));
memset(flag, , sizeof(flag)); while(!q.empty())
q.pop(); printf("Case #%d:\n", cas++);
int sz = , cnt = ;
for( int i = ; i < n; ++i ){
if( str[i][] == 'i' ){
num = input[++cnt];
q.push(num);
sz++;
num = mp[num];
add(num, );
flag[num] = ;
}else if( str[i][] == 'q' ){
int p = sz/+;
//cout << "p: " << p << endl;
solve(p);
}else{
sz--;
num = q.front();
q.pop();
num = mp[num];
add(num, -);
flag[num] = ;
}
}
} return ;
} /**
11
in 32
in 16
in 87
out
in 96
in 34
query
out
out
in 3687
query
*/

hdu5249的更多相关文章

  1. 无序数组的中位数(set+deque)hdu5249

    KPI Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  2. 划分树 poj2104 hdu5249

    KPI Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  3. hdu5249 Tricks Device(网络流最大匹配)

    分析题意可知: 1.最少须要切断多少边使吴不能找到张(题意吴仅仅能走最短路径上面的边),对从起点到终点的最短路径又一次建图,每条边的权值为1.求最大流就可以 2.在吴能够找到张的前提下,最多能够切断边 ...

  4. [hdu5249]动态中位数

    题意:3种操作分别为入队,出队,查询当前队列的中位数.操作数为1e5数量级. 思路:先考虑离线算法,可以离散+线段树,可以划分树,考虑在线算法,则有treap名次树,SBtree(size balan ...

随机推荐

  1. [转]linux实时查看更新日志命令

    很多时候在调试生成或正式平台服务器的时候想查看实时的日志输出,在Linux中可以使用tail 或 watch来实现. 比如我们项目中有个 app.log 的日志文件,我们普通读取都使用 vi app. ...

  2. echarts图表初始大小问题及echarts随窗口变化自适应

    最近在做一个轮播图,使用的是element的Carousel走马灯,每一个走马灯里是eachrts图,开始页面加载的时候发现echarts图并不能自适应,开始以为是走马灯的问题,后来发现不是 不知道大 ...

  3. chrome浏览器 快捷键设置

    如何设置谷歌浏览器在新窗口中打开链接?如何设置谷歌浏览器在新标签页中打开链接?一.快捷键方式: 1.左键单击 ==> 在当前窗口中打开目标网页. 2.Shift + 左键单击 ==> 在新 ...

  4. demo__image_loader

    环境 webpack4.x 文件结构 │ package.json │ webpack.config.js │ yarn.lock │ ├─dist │ 1f871aa58.png │ bundle. ...

  5. php第十八节课

    PDO 对不同的数据库连接使用 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "ht ...

  6. hdu2004 成绩转换【C++】

    成绩转换 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  7. 如何删除电脑中使用过的COM端口

    打开注册表编辑器:开始--运行中输入regedit就可以了 打开注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\COM Name Arb ...

  8. [luogu2209][USACO13]燃油经济性Fuel Economy_贪心

    燃油经济性Fuel Economy 题目大意:FJ想要去旅行.他的车总容量为G,每行驶一个单位就消耗一个单位的油.FJ要行驶D个单位的距离.期间存在n个加油站,每个加油站有一个价格,表示在这个燃油站买 ...

  9. Spring MVC SessionAttributes ModelAttribute注解

    说明 本文主要针对 @SessionAttributes注解 和 @ModelAttribute注解的基础用法进行解析.至于为什么会将这两个注解放在一起,是因为它们之间还是有点影响的. @Sessio ...

  10. N天学习一个linux命令之ssh-keygen

    用途 生成ssh加密算法需要使用到的秘钥以及管理和转换 用法 ssh-keygen [-q] [-b bits] -t type [-N new_passphrase] [-C comment] [- ...