正解:整体二分

解题报告:

传送门$w$

阿查询带修区间第$k$小不显然整体二分板子呗,,,

就考虑先按时间戳排序(,,,其实并不需要读入的时候就按着时间戳排的鸭$QwQ$

每次二分出$mid$先把所有修改值小于等于$mid$的计入进去就成

查询的时候用值域线段树就成.

其实感觉和板子差不多,,,?而且修改还从区间变成单点了$QwQ$

$over$

#include<bits/stdc++.h>
using namespace std;
#define il inline
#define gc getchar()
#define ri register int
#define rb register bool
#define rc register char
#define lowbit(x) (x&(-x))
#define rp(i,x,y) for(ri i=x;i<=y;++i)
#define my(i,x,y) for(ri i=x;i>=y;--i) const int N=+,inf=1e9;
int n,m,a[N],nod_cnt,tr[N<<];
struct node{int l,r,K,id,as;}nod[N<<],tmp1[N<<],tmp2[N<<]; il int read()
{
rc ch=gc;ri x=;rb y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il bool cmp(node gd,node gs){return gd.id<gs.id;}
il bool rd(){rc ch=gc;while(ch!='Q' && ch!='C')ch=gc;return ch=='Q';}
il void modify(ri x,ri val){while(x<=n)tr[x]+=val,x+=lowbit(x);}
il int query(ri x){ri ret=;while(x)ret+=tr[x],x-=lowbit(x);return ret;}
void solv(ri l,ri r,ri dat_l,ri dat_r)
{
if(l>r)return;
if(dat_l==dat_r){rp(i,l,r)nod[i].as=dat_l;return;}
ri mid=(dat_l+dat_r)>>,t1=,t2=;
rp(i,l,r)
if(nod[i].l>n)if(nod[i].K<=mid)tmp1[++t1]=nod[i],modify(nod[i].r,nod[i].l-n-);else tmp2[++t2]=nod[i];
else
{
ri d=query(nod[i].r)-query(nod[i].l-);
if(d>=nod[i].K)tmp1[++t1]=nod[i];else nod[i].K-=d,tmp2[++t2]=nod[i];
}
rp(i,l,r)if(nod[i].l>n && nod[i].K<=mid)modify(nod[i].r,-nod[i].l+n+);
rp(i,,t1)nod[i+l-]=tmp1[i];rp(i,t1+,t1+t2)nod[i+l-]=tmp2[i-t1];
solv(l,l+t1-,dat_l,mid);solv(l+t1,r,mid+,dat_r);
} int main()
{
//freopen("2617.in","r",stdin);freopen("2617.out","w",stdout);
n=read();m=read();rp(i,,n)nod[++nod_cnt]=(node){n+,i,a[i]=read(),};
rp(i,,m)
{
rb op=rd();ri pos=read();
if(op)nod[++nod_cnt]=(node){pos,read(),read(),nod_cnt};
else{nod[++nod_cnt]=(node){n+,pos,a[pos],};a[pos]=read();nod[++nod_cnt]=(node){n+,pos,a[pos],};}
}
solv(,nod_cnt,,inf);
sort(nod+,nod+nod_cnt+,cmp);rp(i,,nod_cnt)if(nod[i].l<=n)printf("%d\n",nod[i].as);
return ;
}

谁能想到我一个整体二分板子写了差不多两个小时呢,,,$QAQ$

洛谷$P2617\ Dynamic\ Rankings$ 整体二分的更多相关文章

  1. 洛谷P2617 Dynamic Rankings

    带修主席树模板题 主席树的单点修改就是把前缀和(大概)的形式改成用树状数组维护,每个树状数组的元素都套了一个主席树(相当于每个数组的元素root[i]都是主席树,且这个主席树维护了(i - lowbi ...

  2. 洛谷P2617 Dynamic Rankings (主席树)

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

  3. 【学习笔鸡】整体二分(P2617 Dynamic Rankings)

    [学习笔鸡]整体二分(P2617 Dynamic Rankings) 可以解决一些需要树套树才能解决的问题,但要求询问可以离线. 首先要找到一个具有可二分性的东西,比如区间\(k\)大,就很具有二分性 ...

  4. 2018.07.01洛谷P2617 Dynamic Rankings(带修主席树)

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

  5. 洛谷 P2617 Dynamic Rankings 解题报告

    P2617 Dynamic Rankings 题目描述 给定一个含有\(n\)个数的序列\(a[1],a[2],a[3],\dots,a[n]\),程序必须回答这样的询问:对于给定的\(i,j,k\) ...

  6. [bzoj1901][zoj2112][Dynamic Rankings] (整体二分+树状数组 or 动态开点线段树 or 主席树)

    Dynamic Rankings Time Limit: 10 Seconds      Memory Limit: 32768 KB The Company Dynamic Rankings has ...

  7. 洛咕P3250 [HNOI2016]网络 整体二分

    这题太神仙了必须写博客... 显然可以想到二分答案.二分一个答案mid,如果所有长度\(\geq mid\)的路径都过x,那么答案一定\(<mid\),否则答案\(\geq mid\). 那么就 ...

  8. P2617 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≤ ...

  9. 【BZOJ1901】Dynamic Rankings [整体二分]

    Dynamic Rankings Time Limit: 10 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 给定一个含 ...

随机推荐

  1. L05 Laravel 教程 - 电商实战

    https://laravel-china.org/courses/laravel-shop https://laravel-china.org/topics/13206/laravel-shop-c ...

  2. DECLARE

    -- 修正用プログラム DECLARE    CURSOR c_adv_fee_detail IS        SELECT adv_fee.fee_mgmt_num,                ...

  3. 学习框架/对象onbeforeunload事件

    1.有没有发现在一些表单提交页面,当我们点击页面某个链接要离开表单提交页面时会弹出一个提示信息,如下: 那么,这是提示是怎么产生的呢?代码如下: window.onbeforeunload=funct ...

  4. X-WAF 安装配置指南

    X-WAF 是一款方便易用的云WAF,使用反向代理的方式介入Web服务器和访问者之间,不需要像 modSecurity 和 Naxsin 那样作为nginx的模块,需要进行编译安装 X-WAF使用 O ...

  5. Android Studio(四):Android Studio集成Genymotion

    Android Studio相关博客: Android Studio(一):介绍.安装.配置 Android Studio(二):快捷键设置.插件安装 Android Studio(三):设置Andr ...

  6. Tenka1 Programmer Beginner Contest D IntegerotS(补)

    当时没做出来,官方题解没看懂,就看别人提交的代码,刚对着别人代码调了几组数据,才发现,思路差不多,不过,原来是这样实现啊,果然我还是很菜 思路:题目要求是选取的这些数字全部进行OR运算,结果<= ...

  7. ThinkPHP商城实战

    ThinkPHP3.2.3商城实战教程,需要的联系我,QQ:1844912514 千万级php电商秒杀项目实战  ,需要的联系我,QQ:1844912514

  8. 利用 jquery 获取某个元素下的所有图片并改变其属性

    HTML代码 <div id="mochu"> <p>内容....<./p> <p><img src="xxxx.p ...

  9. H3C 配置CHAP验证

  10. Python--day26--反射

    反射对象的属性:(非常重要) getattr(类名,‘属性名’):获得属性值 使用getattr的好处:需要查看某个属性值的时候,不用再在代码中用if else elif 去判断输入(input函数) ...