这道题显然平衡树,splay,treap什么的随便切
然而我不想打,决定水过这道题
把空间开3倍,树状数组维护它前面的树的个数,开个id数组记录位置
找一个数排名直接二分加求前缀和,log^2的搞一搞
把一个数放在顶/低 直接丢在当前顶/低的前后就可以了不然开3倍数组干嘛
c常数小堪比log的平衡树居然还快一些

# include <bits/stdc++.h>
# define RG register
# define IL inline
# define Fill(a, b) memset(a, b, sizeof(a))
using namespace std;
typedef long long ll;
const int _(3e5 + 10), INF(2e9), PF(1e5); IL ll Read(){
char c = '%'; ll x = 0, z = 1;
for(; c > '9' || c < '0'; c = getchar()) if(c == '-') z = -1;
for(; c >= '0' && c <= '9'; c = getchar()) x = x * 10 + c - '0';
return x * z;
} int n, m, t[_], id[_], a[_];
char opt[10]; IL void Add(RG int x, RG int v){ for(; x <= PF * 3; x += x & -x) t[x] += v; } IL int Query(RG int x){ RG int cnt = 0; for(; x; x -= x & -x) cnt += t[x]; return cnt; } IL int Find(RG int x){
RG int l = 1, r = PF * 3;
while(l < r){
RG int mid = (l + r) >> 1;
if(Query(mid) >= x) r = mid;
else l = mid + 1;
}
return l;
} int main(RG int argc, RG char *argv[]){
n = Read(); m = Read();
for(RG int i = 1; i <= n; ++i) a[PF + i] = Read(), Add(PF + i, 1), id[a[PF + i]] = PF + i;
while(m--){
scanf(" %s", opt); RG int x = Read(), y, p, q;
if(opt[0] == 'T'){
p = Find(1);
a[id[x]] = 0; Add(id[x], -1);
id[x] = p - 1;
a[id[x]] = x; Add(id[x], 1);
}
else if(opt[0] == 'B'){
p = Find(n);
a[id[x]] = 0; Add(id[x], -1);
id[x] = p + 1;
a[id[x]] = x; Add(id[x], 1);
}
else if(opt[0] == 'I'){
y = Read(); q = Query(id[x]);
p = Find(q + y); RG int t = a[p];
swap(a[p], a[id[x]]); swap(id[x], id[t]);
}
else if(opt[0] == 'A') printf("%d\n", Query(id[x]) - 1);
else printf("%d\n", a[Find(x)]);
}
return 0;
}

[ZJOI2006]书架(树状数组水过)的更多相关文章

  1. bzoj1103树状数组水题

    (卧槽,居然规定了修改的两点直接相连,亏我想半天) 非常水的题,用dfs序(而且不用重复,应该是直接规模为n的dfs序)+树状数组可以轻松水 收获:树状数组一遍A(没啥好骄傲的,那么简单的东西) #i ...

  2. Lightoj 1112 - Curious Robin Hood 【单点改动 + 单点、 区间查询】【树状数组 水题】

    1112 - Curious Robin Hood PDF (English) Statistics Forum Time Limit: 1 second(s) Memory Limit: 64 MB ...

  3. bzoj 3262 陌上花开 - CDQ分治 - 树状数组

    Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义一朵花A比另一朵花B要美丽,当 ...

  4. 【bzoj1452】[JSOI2009]Count 二维树状数组

    题目描述 输入 输出 样例输入 样例输出 1 2 题解 二维树状数组 一开始没看到 1≤c≤100 ,想到了主X树和X块,结果发现c的范围那么小... 二维树状数组水题,和一维的一样,向上修改,向下查 ...

  5. [ZJOI2006]书架(二分+树状数组)

    这题90%以上的人做法为裸的平衡树,实际上根本没必要还常数大,最好的方法是二分+树状数组.具体做法是,开3倍内存,初始把中间n位赋值为1.对于每个操作:1&2.删除该位,将其丢在头/尾(开三倍 ...

  6. HDU 1892(书架统计 二维树状数组)

    题意是在二维平面上在一些位置上进行数据的增删改查操作,使用树状数组(了解树状数组点这里) 原来的树状数组在求区间和时是 sum( x, y ) = getsum( y ) - getsum( x - ...

  7. HihoCoder 1488 : 排队接水(莫队+树状数组)

    描述 有n个小朋友需要接水,其中第i个小朋友接水需要ai分钟. 由于水龙头有限,小Hi需要知道如果为第l个到第r个小朋友分配一个水龙头,如何安排他们的接水顺序才能使得他们等待加接水的时间总和最小. 小 ...

  8. 二维树状数组(水题) POJ1195

    前段时间遇到线段树过不了,树状数组却过了的题.(其实线段树过得了的) 回忆了下树状数组. 主要原理,还是二进制位数,每一项的和表示其为它的前((最后一位1及其后)的二进制数)和,可从二进制图来看.(用 ...

  9. hdu 2642 二维树状数组 单点更新区间查询 模板水题

    Stars Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/65536 K (Java/Others) Total Subm ...

随机推荐

  1. 定制化WinPE

    1 .首先挂载wim Dism /Mount-WIM /WimFile:D:\install.wim /Index: /MountDir:D:\wimmount 2. 如何要修改WinPE的启动项,可 ...

  2. c中const定义的问题

    /* 这题有个疑问: const double BASE1=BREAK1*RATE1; //第二个分界点前总共要缴的税收 const double BASE2=BASE1+(BREAK2-BREAK1 ...

  3. centos ELK安装

    本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn ELK是进行日志收集分析用的,具体工作.原理.作用自行google. ...

  4. ci框架基础知识点

    一.路由 1.index.php/test/hello->控制器test的hello方法 2. 也可以手动配置路由   app/config/routes.php中     I:$route[' ...

  5. [记录]一则清理MySQL大表以释放磁盘空间的案例

    一则清理MySQL大表以释放磁盘空间的案例 一.基本情况: 1.dbtest库554G,先清理st_online_time_away_ds(37G)表的数据,保留半年的数据: 1)删除的数据:sele ...

  6. java 23种设计模式 深入理解

    以下是学习过程中查询的资料,别人总结的资料,比较容易理解(站在各位巨人的肩膀上,望博主勿究) 创建型抽象工厂模式 http://www.cnblogs.com/java-my-life/archive ...

  7. php 网络爬虫2种方法

    1,通过curl进行抓取再进行写入文件当中: $curlobj = curl_init(); // 初始化curl_setopt($curlobj, CURLOPT_URL, "https: ...

  8. nginx80端口被占用,启动失败。

    mac自带的apache占用了80端口,导致nginx服务器不能启动.这个问题是怎么解决的,目前还是不清楚. apache占用端口,使用命令进行关闭: apachectl  -k  stop,然后重启 ...

  9. 弄懂 JRE、JDK、JVM 之间的区别与联系

    其实很多 Java 程序员在写了很多代码后,你问他 jre 和 jdk 之间有什么关系,jvm 又是什么东西,很多人不知所云.本篇不会讲述 jvm 底层是如何与不同的系统进行交互的,而主要理清楚三者之 ...

  10. app后端session共享问题

    在分布式中,session如何共享,用户登陆要解决的问题如下图所示,通过nignx请求转发,到不同的应用模块中,需要判断用户有没有登陆验证通过,问题又来了,app的移动端不像浏览器,没有cookie, ...