当前位置: 首页 > 编程日记 > 正文

BZOJ1901Zju2112 Dynamic Rankings——树状数组套主席树

题目描述

给定一个含有n个数的序列a[1],a[2],a[3]……a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1
],a[i+2]……a[j]中第k小的数是多少(1≤k≤j-i+1),并且,你可以改变一些a[i]的值,改变后,程序还能针对改
变后的a继续回答上面的问题。

输入

第一行有两个正整数n(1≤n≤10000),m(1≤m≤10000)。
分别表示序列的长度和指令的个数。
第二行有n个数,表示a[1],a[2]……a[n],这些数都小于10^9。
接下来的m行描述每条指令
每行的格式是下面两种格式中的一种。
Q i j k 或者 C i t
Q i j k (i,j,k是数字,1≤i≤j≤n, 1≤k≤j-i+1)
表示询问指令,询问a[i],a[i+1]……a[j]中第k小的数。
C i t (1≤i≤n,0≤t≤10^9)表示把a[i]改变成为t
m,n≤10000

输出

对于每一次询问,你都需要输出他的答案,每一个输出占单独的一行。

样例输入

5 3
3 2 1 4 7
Q 1 4 3
C 2 6
Q 2 5 3

样例输出

3
6
  带修改主席树经典题,树状数组上每个点建一棵主席树,存树状数组上这个点包含的序列中点的信息,修改看成删除和插入,每次操作跳lowbit。
不会带修改主席树的参见->主席树讲解
#include<set>
#include<map>
#include<queue>
#include<cmath>
#include<stack>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
typedef long long ll;
using namespace std;
int n,m;
char ch[2];
int x,y,z;
int cnt;
int tot;
int num;
int ls[8000010];
int rs[8000010];
int sum[8000010];
int root[100010];
int s[100010];
int t[100010];
int a[100010];
int updata(int pre,int l,int r,int k)
{int rt=++cnt;if(l==r){sum[rt]=sum[pre]+1;return rt;}ls[rt]=ls[pre];rs[rt]=rs[pre];sum[rt]=sum[pre]+1;int mid=(l+r)>>1;if(k<=mid){ls[rt]=updata(ls[pre],l,mid,k);}else{rs[rt]=updata(rs[pre],mid+1,r,k);}return rt;
}
int downdata(int pre,int l,int r,int k)
{int rt=++cnt;if(l==r){sum[rt]=sum[pre]-1;return rt;}ls[rt]=ls[pre];rs[rt]=rs[pre];sum[rt]=sum[pre]-1;int mid=(l+r)>>1;if(k<=mid){ls[rt]=downdata(ls[pre],l,mid,k);}else{rs[rt]=downdata(rs[pre],mid+1,r,k);}return rt;
}
void add(int v,int x)
{for(int i=x;i<=n;i+=i&-i){root[i]=updata(root[i],0,1e9,v);}
}
void del(int v,int x)
{for(int i=x;i<=n;i+=i&-i){root[i]=downdata(root[i],0,1e9,v);}
}
int query(int l,int r,int k)
{if(l==r){return l;}int ans=0;int res=0;for(int i=1;i<=num;i++){res+=sum[ls[s[i]]];}for(int i=1;i<=tot;i++){ans+=sum[ls[t[i]]];}int mid=(l+r)>>1;if(ans-res>=k){for(int i=1;i<=num;i++){s[i]=ls[s[i]];}for(int i=1;i<=tot;i++){t[i]=ls[t[i]];}return query(l,mid,k);}else{for(int i=1;i<=num;i++){s[i]=rs[s[i]];}for(int i=1;i<=tot;i++){t[i]=rs[t[i]];}return query(mid+1,r,k-(ans-res));}
}
void ask(int l,int r,int x)
{num=0;tot=0;for(int i=l;i;i-=i&-i){s[++num]=root[i];}for(int i=r;i;i-=i&-i){t[++tot]=root[i];}printf("%d\n",query(0,1e9,x));
}
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){scanf("%d",&a[i]);add(a[i],i);}for(int i=1;i<=m;i++){scanf("%s",ch);if(ch[0]=='Q'){scanf("%d%d%d",&x,&y,&z);ask(x-1,y,z);}else{scanf("%d%d",&x,&y);del(a[x],x);a[x]=y;add(a[x],x);}}
}

转载于:https://www.cnblogs.com/Khada-Jhin/p/9513584.html

相关文章:

Git与github基本操作

一. git安装与简单配置 1. git的安装 首先进入git的官方网站git-scm.com 下载自己电脑对应的git版本&#xff0c;然后点击安装即可 点击上图的红色部分进行下载 安装的时候直接默认即可 找到你的Git安装位置&#xff0c;把快捷方式中的git bash发送到桌面&#xff0…

容器 root权限运行_【漏洞通告】Containerd容器逃逸漏洞通告 (CVE202015257)

2020年12月1日&#xff0c;Containerd发布更新&#xff0c;修复了一个可造成容器逃逸的漏洞CVE-2020-15257&#xff0c;并公开了相关说明。通过受影响的API接口&#xff0c;攻击者可以利用该漏洞以root权限执行代码&#xff0c;实现容器逃逸。深信服安全研究团队依据漏洞重要性…

IOS成长之路-NSMutableURLRequest实现Post请求

NSData *bodyData [[bodyString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]dataUsingEncoding:NSUTF8StringEncoding];//把bodyString转换为NSData数据 NSURL *serverUrl [[NSURL URLWithString:RequestUrl] URLByAppendingPathComponent:urlStr];//获…

rsync ssh文件同步

参考链接 下载 manual #rsync -avP -e ssh ./filename root192.68.1.38:/root/paths/ &#xff08;本地到远程&#xff09; #rsync -avP -e ssh root192.68.1.38:/root/paths/test.tar.gz /root /paths &#xff08;远程到本地&#xff09; rsync -av --progress --inpl…

【转】Linux思维导图

【原文】https://www.toutiao.com/i6591690511763898888/ 1、Linux学习路径&#xff1a; 2、Linux桌面介绍&#xff1a; 3、FHS(文件系统目录标准)&#xff1a; 4、Linux需要特别注意的目录&#xff1a; 5、Linux 内核学习路线&#xff1a; 6、Linux Security Coaching&#xf…

Python中lxml库的安装(Windows平台)

之前写过《Python中requests包的安装》&#xff0c;今天我需要安装lxml库&#xff0c;这里我尝试之前安装requests方式&#xff0c;但是没有成功&#xff0c;几经周折&#xff0c;终于总结出来了一个方法&#xff0c;这里拿出来给大家分享。 首先就是自己的电脑已经安装好了Py…

hadoop fs命令无法使用_「大数据」「Hadoop」HDFS的配置与管理

HDFS(Hadoop Distributed File System)是Hadoop三个基础组件之一&#xff0c;为另外的组件以及大数据生态中的其他组件提供了最基本的存储功能&#xff0c;具有高容错、高可靠、可扩展、高吞吐率等特点。HDFS运行在java环境中&#xff0c;因此我们都需要安装JDK。安装完成之后是…

Oracle 触发器 Update 不能操作本表的疑问

今天要解决一个需求&#xff0c;类似表A有个字段叫flag存储的是0 or 1 &#xff0c;当一行记录更改为1的时候&#xff0c;其他行同字段要变为0。 这样的需求第一个思路想尝试下能否用触发器来实现 create or replace trigger tr_equiptreeweatherstation before UPDATE ON con…

前景检测算法_3(GMM)

摘要 本文通过opencv来实现一种前景检测算法——GMM&#xff0c;算法采用的思想来自论文[1][2][4]。在进行前景检测前&#xff0c;先对背景进行训练&#xff0c;对图像中每个背景采用一个混合高斯模型进行模拟&#xff0c;每个背景的混合高斯的个数可以自适应。然后在测试阶段&…

ADO.Net五个对象

Connection Command DataAdapter DataSet DataReader 取5个单词的首字母CCDDD&#xff0c;在拼音输入法里面打一下&#xff0c;出来5个字&#xff0c;然后就记忆为曹操打豆豆。 制作了一张图片&#xff0c;用来帮助记忆曹操打豆豆。 Reference ADO.NET的五大对象转载于:ht…

XPath与多线程爬虫

一. Xpath的介绍与配置 1. XPath是什么 XPath是一门语言 XPath可以在XML文档中查找信息 XPath支持HTML XPath通过元素和属性进行导航 总结&#xff1a; XPath可以用来提取信息&#xff08;和正则表达式类似&#xff09; XPath比正则表达式更加厉害 XPath比正则表…

html无序列表空心圆_列表样式的使用CSS入门基础(018)

今天我们分享关于列表样式的内容。列表项list-sytle-type&#xff1a;在HTML学习中&#xff0c;我们知道有有序列表和无序列表&#xff0c;都是使用type属性来定义的。1、有序列表有序列表 有序列表 有序列表 属性值type&#xff1a;1&#xff0c;数字1、2、3……&#xff1b…

2013年3月百度之星B题

Sigma Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Problem Description 小H是一个程序员。他很喜欢做各种各样的数学题&#xff0c;尤其喜欢做《水泥数学》。 在看了《水泥数学》的2.5章后&#xff0c;小H终于会用9种计算 1^22^2...n^…

TCP/IP 10.1集成IS-IS协议

樱桃小小的 软软的甜甜的好吃哈&#xff01;感谢上帝 &#xff0c; 恩呢 &#xff0c; 让我吃的这么满足&#xff0c;开心&#xff01;第十章 集成IS-IS协议建议在学习ISIS的时候联系2个<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office"…

运维基础-文件权限管理

Linux是一个多用户操作系统&#xff0c;在多用户操作系统上我们需要一种方法来允许或者拒绝访问特定的文件和目录。文件有所属人和相关的单个组。我们可以设置所属人或者租的权限&#xff0c;以及所有其他人的权限。 文件只具有三个应用权限的用户类别。文件的所有者&#xff0…

android帧动画实现方法之一

好多动画离不开帧动画的使用&#xff0c;下面就实现帧动画的制作方式之一&#xff0c;以后会推出其他方法。 上面是文件存放位置。 a.xml文件的代码如下&#xff1a; <?xml version"1.0" encoding"utf-8"?> <animation-list xmlns:android"…

python技术晨讲_python系列教程14

声明&#xff1a;在人工智能技术教学期间&#xff0c;不少学生向我提一些python相关的问题&#xff0c;所以为了让同学们掌握更多扩展知识更好的理解人工智能技术&#xff0c;我让助理负责分享这套python系列教程&#xff0c;希望能帮到大家&#xff01;好了&#xff0c;是开始…

三字母词和转义字符

1. 三字母词 在C语言中有一种三字母词的说法&#xff0c;trigraph sequences&#xff0c;目前为止有九种三字母词&#xff0c;如下 ?? # ??) ] ??! | ??( [ …

写了个Python脚本监控nginx进程

写了个Python脚本监控nginx进程 Xiaoxia[PG]写了个Python脚本监控nginx进程接上一文用iptables让SSH服务对陌生人说不。还是有点担心这个学期内&#xff0c;nginx可能会因为系统各种原因而出现异常退出&#xff0c;导致Web服务暂停。所以&#xff0c;又来了一个方案。view pla…

Linux shell 脚本报错:/bin/bash^M: bad interpreter: No such file or directory

今天遇到一个很诡异的问题&#xff0c;一直运行很正常的shell脚本失败了&#xff0c;只是昨天增加了一个参数而已。 报错信息&#xff1a; /bin/bash^M: bad interpreter: No such file or directory 后来发现root cause, 昨天修改文件的时候在windows中修改保存&#xff0c;然…

C语言volatile关键字详解

volatile提醒编译器它后面所定义的变量随时都有可能改变&#xff0c;因此编译后的程序每次需要存储或读取这个变量的时候&#xff0c;都会直接从变量地址中读取数据。如果没有volatile关键字&#xff0c;则编译器可能优化读取和存储&#xff0c;可能暂时使用寄存器中的值&#…

python储存数据的容器_Python基础四容器类数据

一、上周内容回顾int bool str 之间的互相转换int str:str(int)int(str) #字符串必须是数字组成int bool:bool(int):非零即TrueTrue --->1 Fasle --->0bool str:str-->bool #非空即Truestr&#xff1a;BIF自己去背吧二、列表why&#xff1a;1.取值费劲。2.对字符串…

Android 清单文件 详解

转载于:https://www.cnblogs.com/mohe/archive/2013/03/31/2991642.html

android屏幕分辨率详解 ldpi mdpi hdpi 程序UI自适应 《官方翻译》

2019独角兽企业重金招聘Python工程师标准>>> 看世界杯的空闲 时间&#xff0c;翻译一下 官方文档。分辨率 问题是大家都很关心的&#xff08;720480会不会悲剧&#xff09;&#xff0c;而关于这个问题&#xff0c;android官方的文档无疑最有说服力。由于不是所有的人…

010 并发的三个特性

一 . 概述 在之前,我们使用synchronized关键词解决了原子性的操作,本节我们分析一个JVM内存模型导致的另外的两个问题. 二 . 可见性 为了加速线程的运行的速度,JVM的内存模型中设置了线程栈中的缓存,当一个线程使用了堆内存的数据的时候,首先会将这个数据缓存到线程栈之中, 当这…

LeetCode: Longest Consecutive Sequence

想到map了&#xff0c;可惜没想到用erase来节省空间&#xff0c;看了网上答案 1 class Solution {2 public:3 int longestConsecutive(vector<int> &num) {4 // Start typing your C/C solution below5 // DO NOT write int main() function6 …

python做测试书籍推荐_学习pytest应该观看的书籍?

这本书有中文版了pytest是动态编程语言Python专用的测试框架&#xff0c;它具有易于上手、功能强大、第三方插件丰富、效率高、可扩展性好、兼容性强等特点。《pytest测试实战》深入浅出地讲解了pytest的使用方法&#xff0c;尤其是具有特色的fixture的用法。作者通过丰富的测试…

路由器、路由与路由表

2019独角兽企业重金招聘Python工程师标准>>> 路由器、路由与路由表 路由器就是一台网络设备&#xff0c;它配备多个网络接口卡(NIC)&#xff0c;能利用它的网络知识正确转发入口流量。 决定一个入口封包应当送给本地主机还是转发所需要的信息&#xff0c;以及在转发…

Hadoop虚拟机的jdk版本和本地eclipse的版本不一致怎么办

在本周学习Hadoop遇到了一个问题&#xff0c;困扰了半天&#xff0c;本人在安装Hadoop时是按照视频来的&#xff0c;结果发现Hadoop上的jdk版本和本地eclipse的版本不一致&#xff0c;导致本地的程序到处jar包传到虚拟机上运用Hadoop不能正常运行&#xff0c;如果你遇到相同的问…

操作符和表达式

一. 操作符 1. 算术操作符 - * / % 除了%之外其余的几个操作符既可以用于计算整型也可以用于计算浮点型数据&#xff0c;%只能计算整型数据&#xff0c;得到的结果是余数 2. 移位操作符 << 左移位操作符 >> 右移位操作符 <<左移…