二逼平衡树 Tyvj 1730 BZOJ3196 Loj#106
树状数组+主席树,模板题,不多说...
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <queue>
#include <iostream>
#include <cstdlib>
using namespace std;
#define N 50005
#define lson l,m,tr[rt].ls
#define rson m+1,r,tr[rt].rs
#define PushUp(rt) tr[rt].siz=tr[tr[rt].ls].siz+tr[tr[rt].rs].siz
struct node
{
int ls,rs,siz;
}tr[N*200];
int rot[N],a[N],n,Q,nx,ny,rx[N],ry[N],cnt;
void insert(int l,int r,int &rt,int v,int c)
{
if(!rt)rt=++cnt;
tr[rt].siz+=c;
if(l==r)return ;
int m=(l+r)>>1;
if(m>=v)insert(lson,v,c);
else insert(rson,v,c);
}
int query_k(int l,int r,int k)
{
if(l==r)return l;
int m=(l+r)>>1,sizls=0;
for(int i=1;i<=nx;i++)sizls-=tr[tr[rx[i]].ls].siz;
//printf("aaa%d %d %d %d\n",l,r,k,sizls);
for(int i=1;i<=ny;i++)sizls+=tr[tr[ry[i]].ls].siz;
//printf("bbb%d %d %d %d\n",l,r,k,sizls);
if(sizls>=k)
{
for(int i=1;i<=nx;i++)rx[i]=tr[rx[i]].ls;
for(int i=1;i<=ny;i++)ry[i]=tr[ry[i]].ls;
return query_k(l,m,k);
}
for(int i=1;i<=nx;i++)rx[i]=tr[rx[i]].rs;
for(int i=1;i<=ny;i++)ry[i]=tr[ry[i]].rs;
return query_k(m+1,r,k-sizls);
}
int query_x(int l,int r,int x)
{
if(l==r)return 1;
int m=(l+r)>>1,sizls=0;
for(int i=1;i<=nx;i++)sizls-=tr[tr[rx[i]].ls].siz;
for(int i=1;i<=ny;i++)sizls+=tr[tr[ry[i]].ls].siz;
if(m>=x)
{
for(int i=1;i<=nx;i++)rx[i]=tr[rx[i]].ls;
for(int i=1;i<=ny;i++)ry[i]=tr[ry[i]].ls;
return query_x(l,m,x);
}
for(int i=1;i<=nx;i++)rx[i]=tr[rx[i]].rs;
for(int i=1;i<=ny;i++)ry[i]=tr[ry[i]].rs;
return sizls+query_x(m+1,r,x);
}
void pre(int l,int r)
{
nx=ny=0;
for(int i=l;i;i-=(i&(-i)))rx[++nx]=rot[i];
for(int i=r;i;i-=(i&(-i)))ry[++ny]=rot[i];
}
int main()
{
scanf("%d%d",&n,&Q);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
for(int j=i;j<=n;j+=j&-j)
{
insert(-1<<30,1<<30,rot[j],a[i],1);
}
}
while(Q--)
{
int op,x,y,z;
scanf("%d%d%d",&op,&x,&y);
if(op!=3)scanf("%d",&z),x--;
if(op==1)
{
pre(x,y);
printf("%d\n",query_x(-1<<30,1<<30,z));
}else if(op==2)
{
pre(x,y);
printf("%d\n",query_k(-1<<30,1<<30,z));
}else if(op==3)
{
for(int i=x;i<=n;i+=i&-i)insert(-1<<30,1<<30,rot[i],a[x],-1);
a[x]=y;
for(int i=x;i<=n;i+=i&-i)insert(-1<<30,1<<30,rot[i],a[x],1);
}else if(op==4)
{
pre(x,y);
int rank=query_x(-1<<30,1<<30,z);
pre(x,y);
printf("%d\n",query_k(-1<<30,1<<30,rank-1));
}else
{
pre(x,y);
int rank=query_x(-1<<30,1<<30,z+1);
pre(x,y);
printf("%d\n",query_k(-1<<30,1<<30,rank));
}
}
return 0;
}
二逼平衡树 Tyvj 1730 BZOJ3196 Loj#106的更多相关文章
- bzoj3196: Tyvj 1730 二逼平衡树 树套树
地址:http://www.lydsy.com/JudgeOnline/problem.php?id=3196 题目: 3196: Tyvj 1730 二逼平衡树 Time Limit: 10 Sec ...
- bzoj 3196 Tyvj 1730 二逼平衡树(线段树套名次树)
3196: Tyvj 1730 二逼平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1807 Solved: 772[Submit][Stat ...
- BZOJ 3196: Tyvj 1730 二逼平衡树( 树套树 )
这道题做法应该很多吧.... 我用了线段树套treap.... -------------------------------------------------------------------- ...
- bzoj 3196/ Tyvj 1730 二逼平衡树 (线段树套平衡树)
3196: Tyvj 1730 二逼平衡树 Time Limit: 10 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description ...
- bzoj 3196: Tyvj 1730 二逼平衡树
#include<cstdio> #include<ctime> #include<cstdlib> #include<iostream> #defin ...
- [Tyvj 1730] 二逼平衡树
先来一发题面QwQ [TYVJ1730]二逼平衡树 Time Limit:2 s Memory Limit:512 MB Description 您需要写一种数据结构(可参考题目标题),来维护一个 ...
- 【BZOJ-3196】二逼平衡树 线段树 + Splay (线段树套平衡树)
3196: Tyvj 1730 二逼平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2271 Solved: 935[Submit][Stat ...
- bzoj 3196 && luogu 3380 JoyOI 1730 二逼平衡树 (线段树套Treap)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3196 题面; 3196: Tyvj 1730 二逼平衡树 Time Limit: 10 Se ...
- 洛谷 P3380 bzoj3196 Tyvj1730 【模板】二逼平衡树(树套树)
[模板]二逼平衡树(树套树) 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 查询k在区间内的排名 查询区间内排名为k的值 修改某一位值上的数值 查询k在 ...
随机推荐
- Activiti初学问题,求解
<userTask id="writeReportTask" name="Write monthly financial report" > < ...
- Python进程与线程
进程与线程:*进程: 进程是系统中程序执行和资源分配的基本单元, 每个进程都有自己的数据段(存储数据).代码段(存储代码).堆栈段(对象和变量). # 全局变量等资源在多个进程中不能 ...
- Spring Security简明实践及相关国际化处理
别人的都是最佳实践,因为我目前的设置没有按照参考文档推荐,还是采用DelegatingFilterProxy,所以我只能说简明实践.先贴我的applicationContext-security.xm ...
- AngularJS之备忘与诀窍
译自:<angularjs> 备忘与诀窍 目前为止,之前的章节已经覆盖了Angular所有功能结构中的大多数,包括指令,服务,控制器,资源以及其它内容.但是我们知道有时候仅仅阅读是不够的. ...
- jsoup 使用总结1--添加header
jsoup 使用总结1--添加header 大部分时候,我们使用jsoup解析网页的是否都是直接Jsoup.connect(url); 孰不知,我们可以添加header,例如 Host, Refere ...
- Java多线程:synchronized的可重入性
从Java多线程:线程间通信之volatile与sychronized这篇文章中我们了解了synchronized的基本特性,知道了一旦有一个线程访问某个对象的synchronized修饰的方法或代码 ...
- Ubuntu下vim中文乱码
在linux中,用vim打开包含中文的文件时,有可能出现乱码 下面的vim配置方法亲测有效 1. 找到你的vimrc文件,也有可能是.vimrc,我的服务器是vimrc,我改的是 有的说建议不要改全局 ...
- 用Java制作一个简单的图片验证码
//Java实现简单验证码功能 package project; import java.awt.Color; import java.awt.Font;import java.awt.Graphic ...
- javascript中的隐式类型转化
javascript中的隐式类型转化 #隐式转换 ## "+" 字符串和数字 如果某个操作数是字符串或者能够通过以下步骤转换为字符串的话,+将进行拼接操作. 如果其中一个操作数是对 ...
- 【转】数据库事务ACID以及事务隔离
本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指 ...