这个是去年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
*/

最新文章

  1. 部署React+webpack工程的步骤
  2. 【Java EE 学习 72 上】【数据采集系统第四天】【增加调查logo】【文件上传】【动态错误页指定】【上传限制】【国际化】
  3. 初始python第三天(三)
  4. webservice的常用注解
  5. scala学习:apply方法
  6. 16.ARC
  7. 一款基于jQuery多图切换焦点图插件
  8. Google Accounts,OpenID,OAuth
  9. 2014-10 u-boot make过程分析
  10. 解决Mac上Android开发时adb连接不到手机问题
  11. Oracle11g R2学习系列 之三教程选择
  12. USACO 2001 OPEN
  13. Python xml处理模块
  14. Android 右上角菜单栏
  15. 点击事件target
  16. sqlite+ef+powertools
  17. vue.js 作一个用户表添加页面----初级
  18. Google&#39;s Machine Learning Crash Course #03# Reducing Loss
  19. C/C++经典面试题
  20. 【BIEE】导出数据报错

热门文章

  1. C#斐波那契数列方法
  2. Mysql 之主从复制,mysql-proxy读写分离
  3. POJ 1088 滑雪(简单的记忆化dp)
  4. uva 133(The Dole Queue UVA - 133)
  5. 11.best fields策略(dis_max参数设置)
  6. python文件头的含义
  7. 【codeforces 755E】PolandBall and White-Red graph
  8. ggplot画图笔记
  9. 无管理员帐号的WIN7,如果使用自己的JDK版本?
  10. Servlet请求参数编码处理(POST &amp; GET)