int find_kth(int k)
{
int ans = , cnt = , i;
for (i = ; i >= ; i--)/
{
ans += ( << i);
if (ans >= maxn|| cnt + c[ans] >= k)
ans -= ( << i);
else
cnt += c[ans];
}
return ans + ;
}

题意:

口袋里可以放进不同大小的糖果,也可以拿出不同大小的糖果。查询过程中第k小的糖果体积是多少

输入T,有T组,接下来是输入m次操作

m行输入op和x

当op等于1的时候,放进x大小的糖果

当op等于2的时候,拿进x大小的糖果

当op等于3的时候,查询第x小的糖果,并输出答案

思路:二分+树状数组(比赛时限)

这里写一个优化的树状数组的写法

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<string>
#define mem(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
#define ll long long
#define lowbit(b) b&(-b)
using namespace std;
const int maxn=1e5+;
int c[maxn],f[];
inline int read() {
char ch = getchar(); int x = , f = ;
while(ch < '' || ch > '') {
if(ch == '-') f = -;
ch = getchar();
} while('' <= ch && ch <= '') {
x = x * + ch - '';
ch = getchar();
} return x * f;
}
inline void updata(int x, int y){
for (int i = x; i <= maxn; i += lowbit(i)){
c[i] += y;
}
}
int main()
{
int t,i;f[]=;
for(i=;i<=;i++){
f[i]=f[i-]*;
}
t=read();
while(t--){
for(i=;i<maxn;i++){c[i]=;}
int m;
m=read();
for(i=;i<m;i++){
int op,x;
op=read();x=read();
if(op==){
updata(x,);
}
else if(op==){
updata(x,-);
}
else{
int ans=,sum=,j;
for(j=;j>=;j--){
ans+=f[j];
if(ans>=maxn || sum+c[ans]>=x){
ans-=f[j];
}
else{
sum+=c[ans];
}
}
printf("%d\n",ans+);
}
}
}
return ;
}
/*
2
3
1 2
1 2
3 1
4
1 2
1 3
2 2
3 1
*/

19市赛 树状数组 第k个小的糖果的更多相关文章

  1. POJ2828 Buy Tickets[树状数组第k小值 倒序]

    Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 19012   Accepted: 9442 Desc ...

  2. hdu 5493 Queue 树状数组第K大或者二分

    Queue Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submi ...

  3. XJTUOJ wmq的队伍(树状数组求 K 元逆序对)

    题目链接:http://oj.xjtuacm.com/problem/14/[分析]二元的逆序对应该都会求,可以用树状数组.这个题要求K元,我们可以看成二元的.我们先从后往前求二元逆序对数, 然后对于 ...

  4. hrbust 1840 (树状数组第k大) 删点使用

    小橙子 Time Limit: 2000 MS Memory Limit: 32768 K Total Submit: 2(2 users) Total Accepted: 1(1 users) Ra ...

  5. Ryuji doesn't want to study 2018徐州icpc网络赛 树状数组

    Ryuji is not a good student, and he doesn't want to study. But there are n books he should learn, ea ...

  6. BZOJ.3110.[ZJOI2013]K大数查询(整体二分 树状数组/线段树)

    题目链接 BZOJ 洛谷 整体二分求的是第K小(利用树状数组).求第K大可以转为求第\(n-K+1\)小,但是这样好像得求一个\(n\). 注意到所有数的绝对值\(\leq N\),将所有数的大小关系 ...

  7. 树状数组求第K小值 (spoj227 Ordering the Soldiers &amp;&amp; hdu2852 KiKi&#39;s K-Number)

    题目:http://www.spoj.com/problems/ORDERS/ and pid=2852">http://acm.hdu.edu.cn/showproblem.php? ...

  8. 4.9 省选模拟赛 划分序列 二分 结论 树状数组优化dp

    显然发现可以二分. 对于n<=100暴力dp f[i][j]表示前i个数分成j段对于当前的答案是否可行. 可以发现这个dp是可以被优化的 sum[i]-sum[j]<=mid sum[i] ...

  9. bzoj4361 isn(树状数组优化dp+容斥)

    4361: isn Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 938  Solved: 485[Submit][Status][Discuss] ...

随机推荐

  1. gerp 查找, sed 编辑, awk 根据内容分析并处理.的作用

    awk(关键字:分析&处理) 一行一行的分析处理 awk '条件类型1{动作1}条件类型2{动作2}' filename, awk 也可以读取来自前一个指令的 standard input相对 ...

  2. intellij idea设置打开多个文件显示在多行tab上

  3. Linux上后台运行node和springboot服务

    环境:Ubuntu18.04 阿里云云服务器 尝试全局安装forever和pm2均失败,最后以linux自带的nohub启动,以前同样用nohub启动springboot 命令: nohup npm ...

  4. python开发基础03-列表、元组、字典、集合操作方法汇总

    列表 创建列表: li = [1, 12, 9, "age", ["石振文", ["19", 10], "庞麦郎"], ...

  5. 寒假安卓app开发学习记录(2)

    今天属实是头疼的一天.开始的时候是简单了解了一下安卓的系统架构,了解到大概分为四个部分. 然后看了两节创建安卓项目的课程,准备去实践一下的时候突然发现我的eclipse里竟然没有Android选项.查 ...

  6. 数据查询SELECT FROM

    [1]指定查询字段数据 SELECT  id,name,job FROM    stu_info;      #指定查询id,name,job字段的信息. SELECT  name FROM    s ...

  7. 序列化--IOSerialize

    序列化与反序列化 序列化:将对象转换为二进制 反序列化:将二进制转换为对象 作用:传输数据:状态保持(例如应用程序记忆上次关闭时的状态) 注:被序列化对象的类的所有成员也必须被标记为可序列化特性.该类 ...

  8. uni-app 去除顶部导航栏

    自学uni-app第一天,因为有一点点的小程序和vue的基础所以感觉对uni-app有一点点的亲切感,从今天呢开始着手从登录页学习uni-app,记录一些用到的知识点,欢迎大家一起学习. 启动页隐藏顶 ...

  9. Linq Group by获取数量和数据

    主表: public partial class Activity { [Key] public int pkActivity { get; set; } public int fkEmployee ...

  10. 迅速看一下jdk8

    一直在看java并发的感觉说的有点多,就看点简单的放松一下吧!这次来简单说一下jdk8,很久没用,都陌生了,仔细看看还挺有意思的,让我们大脑转化一个角度来写代码:因为我们现在平常大部分用jdk7写代码 ...