二逼平衡树 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在 ...
随机推荐
- angularjs作用域之transclude
transclude是一个可选的参数.如果设置了,其值必须为true,它的默认值是false.嵌入有时被认为是一个高级主题,但某些情况下它与我们刚刚学习过的作用域之间会有非常好的配合.使用嵌入也会很好 ...
- Spring多数据源解决方案
Figure 2 多数据源的选择逻辑渗透至客户端 解决方案 Figure 3 采用Proxy模式来封转数据源选择逻辑 通过采用Proxy模式我们在方案实现中实现一个虚拟的数据源.并且通过它来封装数据源 ...
- werfault进程使用CPU率高
werfault进程是Windows vista 错误报告进程,是用来向微软反馈报告.是安全的正常进程. 解决方法:1.打开控制面板”—“系统和维护”,点击“问题报告和解决方案”. 2.点击“更改设置 ...
- 前端到docker入门
Docker的诞生 我们总是会遇到测试对开发说项目又不work了,开发总说:在我电脑上是ok的阿. 项目组加了新人,我们就需要教新人配置各种开发环境,每换一台机器就要配置一次,每来一个新人就要配置一次 ...
- Day3_函数
为啥要用到函数: 复杂度增大 组织结构不清晰 可读性差 工具就是具备某一种功能的物件,就是程序中函数的概念. 事先准备工具的过程称为函数的定义 遇到特定的场景拿来用就称为函数的调用 函数的分类: 内置 ...
- win10安装wmi报错问题
在win10上,安装wmi,首先下载https://pypi.python.org/pypi/WMI/#downloads,将wmi下载下来 安装过程中,会报错,No Python installat ...
- Ubuntu设置代理的方法
用过Linux的都知道,众多的PROXY配置,让人应接不暇,本文列出常见的一些PROXY的配置 1.apt-get proxy 的配置sudo gedit /etc/apt/apt.conf NOTE ...
- Django Channels简明实践
1.安装,如果你已经安装django1.9+,那就不要用官方文档的安装指令了,把-U去掉,直接用: sudo pip install channels 2.自定义的普通Channel的名称只能包含a- ...
- 安装RabbitMQ编译erlang时,checking for c compiler default output file name... configure:error:C compiler cannot create executables See 'config.log' for more details.
checking for c compiler default output file name... configure:error:C compiler cannot create executa ...
- AspnetCore 缓存篇
AspnetCore 缓存篇 一.缓存的作用 怎样理解缓存: 其实所有的程序,架构,优化,线程...等技术手段,最终的目的都是如何使产品快速的响应用户的操作,提高用户的体验性,目标都是为了系统的使用者 ...