[ZJOI2006]书架(二分+树状数组)
这题90%以上的人做法为裸的平衡树,实际上根本没必要还常数大,最好的方法是二分+树状数组。具体做法是,开3倍内存,初始把中间n位赋值为1。对于每个操作:1&2、删除该位,将其丢在头/尾(开三倍内存的原因)。3、插入时直接二分查询第ask(x)+y位,换一下即可。4、直接查询。5、二分查询。复杂度O(nlog2n)
#include<bits/stdc++.h>
using namespace std;
const int N=;
int n,m,a[N],id[N],c[N];
void add(int x,int v){while(x<=*m+n)c[x]+=v,x+=x&-x;}
int ask(int x){int ret=;while(x)ret+=c[x],x-=x&-x;return ret;}
int find(int x)
{
int l=,r=*m+n,mid,pos=*m+n;
while(l<=r)
{
mid=l+r>>;
if(ask(mid)>=x)pos=mid,r=mid-;
else l=mid+;
}
return pos;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=,x;i<=n;i++)scanf("%d",&a[i+m]),id[a[i+m]]=i+m,add(i+m,);
for(int i=;i<=m;i++)
{
char str[];int x,y,t,pos,tmp;
scanf("%s%d",str,&x);
if(str[]=='T')pos=find(),add(id[x],-),add(pos-,),id[x]=pos-,a[id[x]]=x;
if(str[]=='B')pos=find(n),add(id[x],-),add(pos+,),id[x]=pos+,a[id[x]]=x;
if(str[]=='I')
{
scanf("%d",&y);
if(!y)continue;
pos=find(ask(id[x])+y),tmp=a[pos];
swap(a[pos],a[id[x]]),swap(id[x],id[tmp]);
}
if(str[]=='A')printf("%d\n",ask(id[x])-);
if(str[]=='Q')printf("%d\n",a[find(x)]);
}
}
[ZJOI2006]书架(二分+树状数组)的更多相关文章
- [ZJOI2006]书架(树状数组水过)
这道题显然平衡树,splay,treap什么的随便切 然而我不想打,决定水过这道题 把空间开3倍,树状数组维护它前面的树的个数,开个id数组记录位置 找一个数排名直接二分加求前缀和,log^2的搞一搞 ...
- 【BZOJ-2527】Meteors 整体二分 + 树状数组
2527: [Poi2011]Meteors Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 831 Solved: 306[Submit][Stat ...
- 【BZOJ3110】【整体二分+树状数组区间修改/线段树】K大数查询
Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位 ...
- BZOJ_3110_[Zjoi2013]K大数查询_整体二分+树状数组
BZOJ_3110_[Zjoi2013]K大数查询_整体二分+树状数组 Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位 ...
- bzoj千题计划316:bzoj3173: [Tjoi2013]最长上升子序列(二分+树状数组)
https://www.lydsy.com/JudgeOnline/problem.php?id=3173 插入的数是以递增的顺序插入的 这说明如果倒过来考虑,那么从最后一个插入的开始删除,不会对以某 ...
- 【bzoj3110】[Zjoi2013]K大数查询 整体二分+树状数组区间修改
题目描述 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c.如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数 ...
- zoj-3963 Heap Partition(贪心+二分+树状数组)
题目链接: Heap Partition Time Limit: 2 Seconds Memory Limit: 65536 KB Special Judge A sequence ...
- 【bzoj4009】[HNOI2015]接水果 DFS序+树上倍增+整体二分+树状数组
题目描述 给出一棵n个点的树,给定m条路径,每条路径有一个权值.q次询问求一个路径包含的所有给定路径中权值第k小的. 输入 第一行三个数 n和P 和Q,表示树的大小和盘子的个数和水果的个数. 接下来n ...
- 【bzoj2527】[Poi2011]Meteors 整体二分+树状数组
题目描述 有N个成员国.现在它发现了一颗新的星球,这颗星球的轨道被分为M份(第M份和第1份相邻),第i份上有第Ai个国家的太空站. 这个星球经常会下陨石雨.BIU已经预测了接下来K场陨石雨的情况.BI ...
随机推荐
- Elasticsearch Query DSL(查询语言)
章节 Elasticsearch 基本概念 Elasticsearch 安装 Elasticsearch 使用集群 Elasticsearch 健康检查 Elasticsearch 列出索引 Elas ...
- Elasticsearch 修改数据
章节 Elasticsearch 基本概念 Elasticsearch 安装 Elasticsearch 使用集群 Elasticsearch 健康检查 Elasticsearch 列出索引 Elas ...
- JS - 局部方法改变全局变量的值
var a = "" function aa() { a="卡卡" } aa() // 注意,aa() 一定要执行,局部赋值全局变量才会有作用 aler ...
- 20 ~ express ~ 前台内容分页展示
一,后台路由文件 /router/main.js var express = require('express') var router = express.Router() var Category ...
- 一个PHP的SQL注入完整过程
本篇文章介绍的内容是一个PHP的SQL注入完整过程,现在分享给大家,有需要的朋友可以参考一下 希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里 ...
- 吴裕雄--天生自然 JAVASCRIPT开发学习:switch 语句
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- SASS - 环境搭建
SASS – 简介 SASS – 环境搭建 SASS – 使用Sass程序 SASS – 语法 SASS – 变量 SASS- 局部文件(Partial) SASS – 混合(Mixin) SASS ...
- Django回顾之_03_Model属性及后端配置
1. Django ORM O(objects):类和对象. R(Relation):关系,关系数据库中的表格. M(Mapping):映射. Django ORM框架的功能: a) 建立模型类和表之 ...
- halcoN GPU
halcon18.11——DL http://www.ihalcon.com/read-11150.html 楼主# 更多发布于:2018-12-04 19:50 1. 按顺序下载安装 h ...
- transform—切割轮播图
效果演示: 1.结构分析 第一步:在一个div里面有显示图片的ul标签(1个)和左右切换的a标签(2个): 第二步:ul标签中有5个li标签,li标签浮动,每个li标签的宽度占ul宽度的五分之一,高度 ...