n<=10000个数有m<=10000个操作,1、询问一个区间的第k小的数;2、单点修改。

带修主席树。

整体二分。

整体二分的必要条件:

 #include<string.h>
#include<stdlib.h>
#include<stdio.h>
//#include<assert.h>
#include<algorithm>
//#include<iostream>
using namespace std; int n,m;
#define maxn 30011
const int inf=0x3f3f3f3f;
struct Ope
{
int x,y,z,id,type;
//type=1: 询问区间[x,y]第z大,询问编号id
//type=0:把位置x的数修改为y,增加:z=1,删除:z=-1
}q[maxn],al[maxn],ar[maxn];int len;
int ans[maxn]; struct BIT
{
int a[maxn];
void add(int x,int v) {for (;x<=n;x+=x&-x) a[x]+=v;}
int query(int x) {int ans=; for (;x;x-=x&-x) ans+=a[x]; return ans;}
}t; void solve(int L,int R,int ql,int qr)
{
if (L>R || ql>qr) return;
if (L==R)
{
for (int i=ql;i<=qr;i++) if (q[i].type) ans[q[i].id]=L;
return;
}
int mid=(L+R)>>,lql=,lqr=;
for (int i=ql;i<=qr;i++)
{
if (q[i].type)
{
int tmp=t.query(q[i].y)-t.query(q[i].x-);
if (tmp>=q[i].z) al[++lql]=q[i];
else
{
q[i].z-=tmp;
ar[++lqr]=q[i];
}
}
else
{
if (q[i].y<=mid)
{
t.add(q[i].x,q[i].z);
al[++lql]=q[i];
}
else ar[++lqr]=q[i];
}
}
for (int i=;i<=lql;i++) if (al[i].type==) t.add(al[i].x,-al[i].z);
for (int i=,j=ql;i<=lql;i++,j++) q[j]=al[i];
for (int i=,j=ql+lql;i<=lqr;i++,j++) q[j]=ar[i];
solve(L,mid,ql,ql+lql-);
solve(mid+,R,ql+lql,qr);
} int a[maxn];
int main()
{
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++) scanf("%d",&q[i].y),a[i]=q[i].y,q[i].x=i,q[i].z=,q[i].type=;
char s[];
int cntq=;
for (int i=,j=n+;i<=m;i++,j++)
{
scanf("%s",s);
if (s[]=='Q') scanf("%d%d%d",&q[j].x,&q[j].y,&q[j].z),q[j].id=++cntq,q[j].type=;
else scanf("%d%d",&q[j].x,&q[j].y),q[j].z=,q[j].type=,
q[j+]=(Ope){q[j].x,a[q[j].x],-,,},a[q[j].x]=q[j].y,j++;
if (i==m) len=j;
}
solve(,inf,,len);
for (int i=;i<=cntq;i++) printf("%d\n",ans[i]);
return ;
}

整体二分--BZOJ1901: Zju2112 Dynamic Rankings的更多相关文章

  1. [BZOJ1901]Zju2112 Dynamic Rankings

    [BZOJ1901]Zju2112 Dynamic Rankings 试题描述 给定一个含有n个数的序列a[1],a[2],a[3]--a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i ...

  2. BZOJ-1901 Zju2112 Dynamic Rankings 函数式线段树 套 树状数组+离线处理

    1901: Zju2112 Dynamic Rankings Time Limit: 10 Sec Memory Limit: 128 MB Submit: 6058 Solved: 2521 [Su ...

  3. BZOJ1901: Zju2112 Dynamic Rankings(整体二分 树状数组)

    Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 9094  Solved: 3808[Submit][Status][Discuss] Descript ...

  4. [luogu2617][bzoj1901][Zju2112]Dynamic Rankings【树套树+树状数组+主席树】

    题目网址 [传送门] 题目大意 请你设计一个数据结构,支持单点修改,区间查询排名k. 感想(以下省略脏话inf个字) 真的强力吹爆洛谷数据,一般的树套树还给我T了一般的点,加强的待修主席树还给我卡了几 ...

  5. 【树状数组套权值线段树】bzoj1901 Zju2112 Dynamic Rankings

    谁再管这玩意叫树状数组套主席树我跟谁急 明明就是树状数组的每个结点维护一棵动态开结点的权值线段树而已 好吧,其实只有一个指针,指向该结点的权值线段树的当前结点 每次查询之前,要让指针指向根结点 不同结 ...

  6. BZOJ1901——Zju2112 Dynamic Rankings

    1.题目大意:区间第k小,有单点修改 2.分析:这个是树状数组套线段树,也是主席树....为什么主席树这么多QAQ 就是树套树的那种插入什么的,注意啊,一定要动态开内存..不然会爆.. 然后算答案有两 ...

  7. BZOJ1901 Zju2112 Dynamic Rankings 主席树

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1901 题意概括 给你一段序列(n个数),让你支持一些操作(共m次), 有两种操作,一种是询问区间第 ...

  8. 【分块】bzoj1901 Zju2112 Dynamic Rankings

    区间k大,分块大法好,每个区间内存储一个有序表. 二分答案,统计在区间内小于二分到的答案的值的个数,在每个整块内二分.零散的暴力即可. 还是说∵有二分操作,∴每个块的大小定为sqrt(n*log2(n ...

  9. bzoj1901: Zju2112 Dynamic Rankings(BIT套主席树)

    带修改的题主席树不记录前缀,只记录单点,用BIT统计前缀.  对于BIT上每一个点建一棵主席树,修改和询问的时候用BIT跑,在主席树上做就行了.  3k4人AC的题#256...应该不算慢 #incl ...

随机推荐

  1. 启动Windows PowerShell ISE

    Windows Server 2008 R2 环境下,启动PoserShell ISE方法: 方法1:在cmd.exe控制台或运行框中,输入 powershell_ise.exe 执行即可. 方法2: ...

  2. Android开发学习——android与服务器端数据交互

    1.首先搭建服务器端. 使用MyEclipse开发工具 public class MyServlet extends HttpServlet { @Override protected void do ...

  3. ADO.net增删改的使用

    添加数据 -------------------------------------------------- //让用户输入要添加的内容 Console.WriteLine("请输入要添加 ...

  4. 工厂方法模式及php实现

    工厂方法模式: 工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Facto ...

  5. 从GridView中直接导出数据到Excel文件 处理导出乱码 类型“GridView”的控件“XXXX”必须放在具有 runat=server 的窗体标记内。”的异常

    导出到Excel方法: <span style="color: rgb(0, 0, 255);">public</span> <span style= ...

  6. mysql 5.7安装过程中,初始化的问题

    初始化不指定参数文件,如使用以下命令初始化: ./mysqld --initialize --user=mysql --basedir=/data/mysql/barry_mysql --datadi ...

  7. 护卫神·云查杀系统V4.0-安全检测部分

    感谢使用护卫神·云查杀系统,该软件专门查杀网页木马,完全免费,欢迎大家使用.    护卫神·云查杀系统 下载地址:http://down.huweishen.com/free/HwsKill.zip ...

  8. cf536c——思路题

    题目 题目:Lunar New Year and Number Division 题目大意:给定一个数字序列,可以任意分组(可调整顺序),但每组至少两个,求每组内数字和的平方的最小值 思路 首先,易证 ...

  9. MyEclipse2017修改Web Context Root

    1,复制一个已经存在的项目,并修改项目名 2,选中项目右键选择properities,打开. 但是这里的web context root无法修改 3,删除web显示properties的所有属性,输入 ...

  10. 查找BUG的方法

    1)测试环境 1)代码调试 2)问题重现 3)思考问题所在 2)生产环境 1)思考 2)测试本地环境是否存在问题 3)打开日志查看 4)思考是否是数据原因 5)拷贝数据到本地进行重现 3)未知错误 1 ...