soj102 普通平衡树
题意:

标程:
#include<cstdio>
using namespace std;
int read()
{
int x=,f=;char ch=getchar();
while (ch<''||ch>'') {if (ch=='-') f=-;ch=getchar();}
while (''<=ch&&ch<='') x=(x<<)+(x<<)+ch-'',ch=getchar();
return x*f;
}
const int N=;
int bit[N+],op,x,n;
int lowbit(int x){return x&(-x);}
void add(int x,int y) {while (x<=N) bit[x]+=y,x+=lowbit(x);}
int sum(int x){int res=;while (x) res+=bit[x],x-=lowbit(x);return res;}
int kth(int k)
{
if (!k||sum(N)<k) return -;
int l=,r;
for (int i=;i>=&&k;i--)
if ((r=l+(<<i))<=N&&bit[r]<k) k-=bit[l=r];
return l+;
}
int main()
{
n=read();
while (n--)
{
op=read(),x=read();
if (op==) {if (!(sum(x)-sum(x-))) add(x,);}else
if (op==) {if (sum(x)-sum(x-)) add(x,-);}else
if (op==) printf("%d\n",sum(x-)+);else
if (op==) printf("%d\n",kth(x));else
if (op==) printf("%d\n",kth(sum(x-)));else
printf("%d\n",kth(sum(x)+));
}
return ;
}
易错点:1.注意5e6有2^22。
2.二分时先找到sum=k-1的最远处,然后+1,即是sum=k的第一点。
题解:树状数组+二分
由于这道题xi比较小,我们不用splay,直接用树状数组即可。
树状数组维护一个数值是否出现。
查询第k个直接在bit上二分即可,类似于倍增,因为树状数组上的每一段都是2的幂次,每一个数都是若干2的幂次的和。树状数组单点的话:除sum(x)-sum(x-1)外也可以用下面的方法:
int ans=bit[x];for (int i=x-1;i!=x-lowbit(x);i-=lowbit(i)) ans-=bit[i];因为在x-lowbit(x)的前面一段是互相抵消的,只需要计算最后一段lowbit的差即可。
soj102 普通平衡树的更多相关文章
- [BZOJ3223]Tyvj 1729 文艺平衡树
[BZOJ3223]Tyvj 1729 文艺平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区 ...
- [BZOJ3224]Tyvj 1728 普通平衡树
[BZOJ3224]Tyvj 1728 普通平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个) ...
- BZOJ3223: Tyvj 1729 文艺平衡树 [splay]
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3595 Solved: 2029[Submit][Sta ...
- [普通平衡树treap]【学习笔记】
3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 9046 Solved: 3840[Submit][Sta ...
- BZOJ 3224: Tyvj 1728 普通平衡树
3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 9629 Solved: 4091[Submit][Sta ...
- BZOJ 3223: Tyvj 1729 文艺平衡树
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3628 Solved: 2052[Submit][Sta ...
- 【Splay】bzoj3223-Tyvj1729文艺平衡树
一.题目 Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 ...
- hiho #1329 : 平衡树·Splay
#1329 : 平衡树·Splay 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:小Hi,上一次你跟我讲了Treap,我也实现了.但是我遇到了一个关键的问题. ...
- bzoj 3196: Tyvj 1730 二逼平衡树
#include<cstdio> #include<ctime> #include<cstdlib> #include<iostream> #defin ...
随机推荐
- Area--->AreaRegistrationContext.MapRoute
文章引导 MVC路由解析---IgnoreRoute MVC路由解析---MapRoute MVC路由解析---UrlRoutingModule Area的使用 Area--->AreaRegi ...
- Ngui之UI框架的层级处理
#region 处理层级问题 void DepthIncrease(UIWndBase uiWnd) { DepthIncrease(uiWnd.transform, UIFlag); } publi ...
- Rabbit MQ 基础入门
Rabbit MQ 学习(一)基础入门 简介 RabbitMQ 简介 为什么选择 RabbitMQ RabbitMQ 的模型架构是什么? AMQP 协议是什么? AMQP 常用命令 概念 生产者和消费 ...
- 关于private,default,protected,public,成员变量访问权限
关于private,protected,public,default成员变量的访问权限,请参阅上图! 子类要访问父类的private成员变量,必须采用采用get方法: eg: public class ...
- css3 常用的属性
1.伪类选择符 Pseudo-Classes Selectors Selectors选择符 CSS Version版本 Description简介 E:link CSS1 设置超链接a在未被访问前的样 ...
- SparkListener监听使用方式及自定义的事件处理动作
本文针对spark 2.0+版本 概述 spark 提供了一系列整个任务生命周期中各个阶段变化的事件监听机制,通过这一机制可以在任务的各个阶段做一些自定义的各种动作.SparkListener便是这些 ...
- 03、request 模块高级
requests高级部分 代理 cookie 验证码的识别 模拟登陆 代理 代理概念:代理服务器. 作用:接受请求==>请求转发. 代理和爬虫之间的关联: 可以使用请求转发的机制使得目的服务器接 ...
- Android笔记之ExpandableListView(悬浮吸顶Demo)
参考链接 ExpandableListView中item的定位问题 - RELY_ON_YOURSELF的博客 - CSDN博客(感觉写得很好,讲到了组位置.子位置及原始位置之间的转换) how to ...
- iOS组件化开发-发布私有库
远程索引库 将远程索引库添关联到本地 pod repo 查看本地已关联仓库源 pod repo add 本地索引库名称 远程索引库仓库地址 pod repo update 索引库名称 pod repo ...
- iOS逆向系列-动态调试
Xcode调试App原理 Mac安装了Xcode Xcode的安装包中包含了debugserver 可执行类型的Mach-O文件,iPhone第一次连接Xcode调试会将Xcode中的debugser ...