树状数组+主席树,模板题,不多说...

#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的更多相关文章

  1. bzoj3196: Tyvj 1730 二逼平衡树 树套树

    地址:http://www.lydsy.com/JudgeOnline/problem.php?id=3196 题目: 3196: Tyvj 1730 二逼平衡树 Time Limit: 10 Sec ...

  2. bzoj 3196 Tyvj 1730 二逼平衡树(线段树套名次树)

    3196: Tyvj 1730 二逼平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1807  Solved: 772[Submit][Stat ...

  3. BZOJ 3196: Tyvj 1730 二逼平衡树( 树套树 )

    这道题做法应该很多吧.... 我用了线段树套treap.... -------------------------------------------------------------------- ...

  4. bzoj 3196/ Tyvj 1730 二逼平衡树 (线段树套平衡树)

    3196: Tyvj 1730 二逼平衡树 Time Limit: 10 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description ...

  5. bzoj 3196: Tyvj 1730 二逼平衡树

    #include<cstdio> #include<ctime> #include<cstdlib> #include<iostream> #defin ...

  6. [Tyvj 1730] 二逼平衡树

    先来一发题面QwQ [TYVJ1730]二逼平衡树 Time Limit:2 s   Memory Limit:512 MB Description 您需要写一种数据结构(可参考题目标题),来维护一个 ...

  7. 【BZOJ-3196】二逼平衡树 线段树 + Splay (线段树套平衡树)

    3196: Tyvj 1730 二逼平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2271  Solved: 935[Submit][Stat ...

  8. bzoj 3196 && luogu 3380 JoyOI 1730 二逼平衡树 (线段树套Treap)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3196 题面; 3196: Tyvj 1730 二逼平衡树 Time Limit: 10 Se ...

  9. 洛谷 P3380 bzoj3196 Tyvj1730 【模板】二逼平衡树(树套树)

    [模板]二逼平衡树(树套树) 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 查询k在区间内的排名 查询区间内排名为k的值 修改某一位值上的数值 查询k在 ...

随机推荐

  1. Netty入门

    一.NIO Netty框架底层是对NIO的高度封装,所以想要更好的学习Netty之前,应先了解下什么是NIO - NIO是non-blocking的简称,在jdk1.4 里提供的新api,他的他的特性 ...

  2. IsNullOrEmpty与IsNullOrWhiteSpace性能比较

    IsNullOrEmpty与IsNullOrWhiteSpace性能谁比较高呢? 在string都是空字符串的情况下: IsNullOrWhiteSpace要比IsNullOrEmpty快大约 1~5 ...

  3. C#高级编程笔记之第二章:核心C#

    变量的初始化和作用域 C#的预定义数据类型 流控制 枚举 名称空间 预处理命令 C#编程的推荐规则和约定 变量的初始化和作用域 初始化 C#有两个方法可以一确保变量在使用前进行了初始化: 变量是字段, ...

  4. centOS7虚拟环境搭建

    今天来记录一下使用WMware虚拟机来搭建centOS虚拟机的过程. 本次使用工具为VMware Workstation 14 Pro,可以从https://www.vmware.com/来获取所需工 ...

  5. httpd基础配置和虚拟主机的配置方法

    RedHat6.5  httpd实验的大概步骤 #解包 tar zxf httpd-2.2.17.tar.gz -C /usr/src#切换到目录 cd /usr/src/httpd-2.2.17/# ...

  6. SpringCloud实战-Hystrix请求熔断与服务降级

    我们知道大量请求会阻塞在Tomcat服务器上,影响其它整个服务.在复杂的分布式架构的应用程序有很多的依赖,都会不可避免地在某些时候失败.高并发的依赖失败时如果没有隔离措施,当前应用服务就有被拖垮的风险 ...

  7. Python3实现ICMP远控后门(中)之“嗅探”黑科技

    ICMP后门 前言 第一篇:Python3实现ICMP远控后门(上) 第二篇:Python3实现ICMP远控后门(上)_补充篇 在上两篇文章中,详细讲解了ICMP协议,同时实现了一个具备完整功能的pi ...

  8. centOS7固定IP

    接续安装完成centOS虚拟机后,重启完成后,会出现如下的界面: 这里,我们使用root帐号和已配置的root密码进行登陆,登陆完成后,输入如下命令,运行结果如下图: dhclient 通过上述命令, ...

  9. leetcode_1. Two Sum

    leetcode_1. Two Sum 前言: 这段时间开始敲leetcode.我认为这并不仅仅只是为了应付笔试,面试.而是确实有着一定的意义. 尤其,你提交代码后,网站会多方面验证你的答案. 另外, ...

  10. Python_sniffer(网络嗅探器)

    import socket import threading import time activeDegree=dict() flag=1 def main(): global activeDegre ...