感觉整体二分是个很有趣的东西。

在别人的博客上看到一句话

对于二分能够解决的询问,如果有多个,那么如果支持离线处理的话,那么就可以使用整体二分了

树套树写了一天还是WA着,调得焦头烂额,所以决定学cdq分治的写法,虽然不知道整体二分和cdq有什么不可不说的关系,就先写了这道主席树模板题(orz LLZ大佬)。

然后历史总是惊人的相似,和上午写cdq分治一样,又在同一个地方栽了跟头

两个cdq模板都是cmp写错,两个整体二分都是把que[i]写成了i QAQ

然后这个代码在洛谷上会T掉,在POJ可以A,就很难受了(vjudge上waiting了35分钟。。。)

//Twenty
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<queue>
#include<vector>
using namespace std;
const int maxn=++;
const int INF=1e9+;
int n,m,tot,sum[maxn],ans[maxn];
struct node{
int op,id,l,r,v;
node(){};
node(int op,int id,int l,int r,int v):op(op),id(id),l(l),r(r),v(v){}
}p[maxn],tp[maxn];
void input() {
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) {
int x;
scanf("%d",&x);
p[i]=node(,i,i,i,x);
}
for(int i=;i<=m;i++) {
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
p[i+n]=node(,i,x,y,z);
}
}
void add(int x,int y) {
for(;x<=n+m;x+=(x&(-x)))
sum[x]+=y;
}
int qry(int x) {
int res=;
for(;x;x-=(x&(-x)))
res+=sum[x];
return res;
}
#define mid ((l+r)>>1)
int lq[maxn],rq[maxn];
void solve(int ql,int qr,int l,int r) {
if(l==&&r==) {
int debug=;
}
//int mid=((l+r)>>1);
if(r<l||qr<ql) return;
if(l==r) {
for(int i=ql;i<=qr;i++)
if(p[i].op==)
ans[p[i].id]=l;
return;
}
int lcnt=,rcnt=;
for(int i=ql;i<=qr;i++) {
if(p[i].op) { //insert
if(p[i].v<=mid) {
add(p[i].id,);
lq[++lcnt]=i;
}
else rq[++rcnt]=i;
}
else { //query
int now=qry(p[i].r)-qry(p[i].l-);
if(now>=p[i].v) lq[++lcnt]=i;
else p[i].v-=now,rq[++rcnt]=i;
}
}
for(int i=;i<=lcnt;i++)
if(p[lq[i]].op&&p[lq[i]].v<=mid) add(p[lq[i]].id,-);
for(int i=;i<lcnt;i++) tp[ql+i]=p[lq[i+]];
for(int i=;i<rcnt;i++) tp[ql+lcnt+i]=p[rq[i+]];
for(int i=ql;i<=qr;i++) p[i]=tp[i];
solve(ql,ql+lcnt-,l,mid);
solve(ql+lcnt,qr,mid+,r);
}
void print() {
for(int i=;i<=m;i++)
printf("%d\n",ans[i]);
}
int main()
{
input();
solve(,m+n,-INF,INF);
print();
return ;
}

K-th number

POJ 2104:K-th Number 整体二分的更多相关文章

  1. poj 3111 K Best 最大化平均值 二分思想

    poj 3111 K Best 最大化平均值 二分思想 题目链接: http://poj.org/problem?id=3111 思路: 挑战程序竞赛书上讲的很好,下面的解释也基本来源于此书 设定条件 ...

  2. POJ 2104:K-th Number(整体二分)

    http://poj.org/problem?id=2104 题意:给出n个数和m个询问求区间第K小. 思路:以前用主席树做过,这次学整体二分来做.整体二分在yr大佬的指点下,终于大概懂了点了.对于二 ...

  3. POJ2104 K-th Number [整体二分]

    题目传送门 K-th Number Time Limit: 20000MS   Memory Limit: 65536K Total Submissions: 69053   Accepted: 24 ...

  4. BZOJ 3110: [Zjoi2013]K大数查询 [整体二分]

    有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少. N ...

  5. BZOJ3110:[ZJOI2013]K大数查询(整体二分)

    Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c.如果是2 a b c形式,表示询问从第a个位置到第b个位 ...

  6. BZOJ 3110 K大数查询 | 整体二分

    BZOJ 3110 K大数查询 题面 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个 ...

  7. BZOJ.3110.[ZJOI2013]K大数查询(整体二分 树状数组/线段树)

    题目链接 BZOJ 洛谷 整体二分求的是第K小(利用树状数组).求第K大可以转为求第\(n-K+1\)小,但是这样好像得求一个\(n\). 注意到所有数的绝对值\(\leq N\),将所有数的大小关系 ...

  8. 【BZOJ-3110】K大数查询 整体二分 + 线段树

    3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 6265  Solved: 2060[Submit][Sta ...

  9. 静态区间第K小(整体二分、主席树)

    题目链接 题解 主席树入门题 但是这里给出整体二分解法 整体二分顾名思义是把所有操作放在一起二分 想想,如果求\([1-n]\)的第\(k\)小怎么二分求得? 我们可以二分答案\(k\), \(O(n ...

随机推荐

  1. 标准 IO 测试 可以打开多少流

    #include <stdio.h> #include <string.h> #include <errno.h> //trerror(errno) int mai ...

  2. 12_通过 CR3 切换_读取指定进程数据

    注意: cr3 切换 ,导致eip 指向的页面,改变为对应cr3 的页面:所以代码也变了:这里需要将这部分代码放入公共区域. 解决: 使用 类似前面 山寨 systemfastcallentry 的方 ...

  3. 【胡策篇】题解 (UOJ 192 + CF938G + SPOJ DIVCNT2)

    和泉纱雾与烟花大会 题目来源: UOJ 192 最强跳蚤 (只改了数据范围) 官方题解: 在这里哦~(说的很详细了 我都没啥好说的了) 题目大意: 求树上各边权乘积是完全平方数的路径数量. 这种从\( ...

  4. HashMap和Hashtable有什么区别

    HashMap和Hashtable都实现了Map接口,因此很多特性非常相似.但是,他们有以下不同点: HashMap允许键和值是null,而Hashtable不允许键或者值是null. Hashtab ...

  5. HashMap 介绍

    基本介绍 1. 用于存储Key-Value键值对的集合(每一个键值对也叫做一个Entry)(无顺序). 2. 根据键的hashCode值存储数据,大多数情况下可以直接定位到它的值. 3. 键key为n ...

  6. HTML中的相对路径与绝对路径

    路径 实际工作中,通常新建一个文件夹专门用于存放图像文件,这时再插入图像,就需要采用“路径”的方式来指定图像文件的位置. 路径可以分为: 相对路径和绝对路径 相对路径 图像文件和HTML文件位于同一文 ...

  7. css属性大全(基础篇)

      什么是CSS? CSS全称为Cascading Style Sheets,中文翻译为“层叠样式表”,简称CSS样式表,所以称之为层叠样式表(Cascading Stylesheet)简称CSS.在 ...

  8. NX二次开发-UFUN更改视图比例大小UF_DRAW_set_view_scale

    #include <uf.h> #include <uf_draw.h> #include <uf_drf.h> #include <uf_obj.h> ...

  9. 原生js - 两种图片懒加载实现原理

    目前图片懒加载的方式主要有两种: 1.利用getBoundingClientRectAPI得到当前元素与视窗的距离来判断 2.利用h5的新API IntersectionObserver 来实现 ge ...

  10. 【转】Linux(CentOS) vps安装xfce桌面+VNC

    以前我发过一篇文章利用vnc远程连接VPS桌面,其中用到的是kde桌面,后来知道xfce总体来说比kde占得内存还小些,因为xfce轻便.简单,今天因为一些原因需要在我的vps上搭建用户桌面,所以就试 ...