脑子一抽开始写主席树,敲了一会发现不对……

整体二分,用二维树状数组维护值为当前区间的格子个数,然后根据k的大小和当前询问的子矩阵里的值和k的大小关系来决定这个询问放在哪一部分向下递归

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=300005;
int n,q,t[505][505],rl[N],ans[N],tot;
struct ques
{
int x,y,xx,yy,k,id;
}f[N],g[N];
struct qwe
{
int i,j,v;
}a[N];
bool cmp(const qwe &a,const qwe &b)
{
return a.v<b.v;
}
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
void update(int x,int y,int v)
{
for(int i=x;i<=n;i+=(i&(-i)))
for(int j=y;j<=n;j+=(j&(-j)))
t[i][j]+=v;
}
int ques(int x,int y)
{
int r=0;
for(int i=x;i>=1;i-=(i&(-i)))
for(int j=y;j>=1;j-=(j&(-j)))
r+=t[i][j];
return r;
}
void wk(int ll,int rr,int l,int r)
{
if(a[ll].v==a[rr].v)
{
for(int i=l;i<=r;i++)
ans[f[i].id]=a[ll].v;
return;
}
int mid=(ll+rr)>>1,c1=l,c2=r;
for(int i=ll;i<=mid;i++)
update(a[i].i,a[i].j,1);
for(int i=l;i<=r;i++)
{
int nw=ques(f[i].xx,f[i].yy)-ques(f[i].x-1,f[i].yy)-ques(f[i].xx,f[i].y-1)+ques(f[i].x-1,f[i].y-1);
if(f[i].k<=nw)
g[c1++]=f[i];
else
{
f[i].k-=nw;
g[c2--]=f[i];
}
}
for(int i=l;i<=r;i++)
f[i]=g[i];
for(int i=ll;i<=mid;i++)
update(a[i].i,a[i].j,-1);
wk(ll,mid,l,c2);
wk(mid+1,rr,c1,r);
}
int main()
{
n=read(),q=read();
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
a[++tot]=(qwe){i,j,read()};
sort(a+1,a+1+tot,cmp);
for(int i=1;i<=q;i++)
f[i].x=read(),f[i].y=read(),f[i].xx=read(),f[i].yy=read(),f[i].k=read(),f[i].id=i;
wk(1,tot,1,q);
for(int i=1;i<=q;i++)
printf("%d\n",ans[i]);
return 0;
}

bzoj 2738: 矩阵乘法【整体二分+树状数组】的更多相关文章

  1. 【BZOJ2738】矩阵乘法 [整体二分][树状数组]

    矩阵乘法 Time Limit: 20 Sec  Memory Limit: 256 MB[Submit][Status][Discuss] Description 给你一个N*N的矩阵,不用算矩阵乘 ...

  2. [BZOJ2738]矩阵乘法-[整体二分+树状数组]

    Description 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. (N<=500,Q<=60000) Solution 考虑二分答案,问题转化为求矩阵内为1 ...

  3. BZOJ.2738.矩阵乘法(整体二分 二维树状数组)

    题目链接 BZOJ 洛谷 整体二分.把求序列第K小的树状数组改成二维树状数组就行了. 初始答案区间有点大,离散化一下. 因为这题是一开始给点,之后询问,so可以先处理该区间值在l~mid的修改,再处理 ...

  4. BZOJ 2738: 矩阵乘法 [整体二分]

    给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. 愚蠢的名字...... 整体二分,影响因子就是矩阵里的数 把$\le mid$的矩阵元素加到二维树状数组里然后询问分成两组就行 ...

  5. BZOJ 1901 Dynamic Rankings (整体二分+树状数组)

    题目大意:略 洛谷传送门 这道题在洛谷上数据比较强 貌似这个题比较常见的写法是树状数组套主席树,动态修改 我写的是整体二分 一开始的序列全都视为插入 对于修改操作,把它拆分成插入和删除两个操作 像$C ...

  6. BZOJ 2527 [POI2011]MET-Meteors (整体二分+树状数组)

    题目大意:略 洛谷传送门 整体二分裸题 考虑只有一个国家的情况如何处理 对询问数量二分答案,暴力$O(m)$打差分,求前缀和验证,时间是$O(mlogK)$ 如果有$n$个国家,就是$O(nmlogK ...

  7. BZOJ 2527 [Poi2011]Meteors (整体二分+树状数组)

    整体二分板题,没啥好讲的-注意是个环-还有所有贡献会爆longlong,那么只要在加之前判断一下有没有达到需要的值就行了- CODE #include <set> #include < ...

  8. 【BZOJ-2527】Meteors 整体二分 + 树状数组

    2527: [Poi2011]Meteors Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 831  Solved: 306[Submit][Stat ...

  9. 【BZOJ3110】【整体二分+树状数组区间修改/线段树】K大数查询

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

  10. BZOJ_3110_[Zjoi2013]K大数查询_整体二分+树状数组

    BZOJ_3110_[Zjoi2013]K大数查询_整体二分+树状数组 Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位 ...

随机推荐

  1. BitMapFactory.decodeFile 总是返回NULL的原因之一

    之前碰到过,顺便记录下来,如果出现这种情况,首先看看是否有对这个文件的读权限.

  2. 稳定币GUSD的优劣势分析

    在币圈,有人乘着牛市东风一夜暴富,也有人不幸赶上熊市倾家荡产,涨跌大起大落是币圈的常态,在如此不稳定的币市,投资者们都想寻求一些稳定.接着,稳定币诞生了. 2018年下半年,稳定币引起了各路投资者的高 ...

  3. javascript学习第一天

    从大学第一次接触到JavaScript,到现在一直是个软肋,之前也是学习过一遍,但是缺乏系统学习,基础不牢,那么今天开始从基础部分学起来,今天是第一天,每天至少要保证效率,也要保证学习质量. 恩,要按 ...

  4. xmlToEntity or entityToXML 工作笔记

    最近工作中调用接口,返回报文是String,取值不方便,需要转换为实体,回来自己简单写了个demo,基本上可以满足工作需求. 除了下面代码外,还要创建对应的实体. package yh.test.t1 ...

  5. 转载的C#学习笔记

    转载地址:http://www.cnblogs.com/renyanlei/p/4075065.html 最近在一个培训机构里面教授Net知识.每天都会带领学生学习c#知识.我希望把每天学习的笔记记录 ...

  6. hdu1015 Safecracker —— 回溯

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1015 代码1: #include<stdio.h>//hdu1015 #include&l ...

  7. HTML页面下雪特效

    1. [代码][HTML]代码     <a  href="javascript:void(function(){var d = document,a = 'setAttribute' ...

  8. codeforces C. Team 解题报告

    题目链接:http://codeforces.com/problemset/problem/401/C 题目意思:给出0和1的数目(分别为n和m个),问是否能构造一条同时满足连续两个0不能再一起和连续 ...

  9. C#开发遇到的常见问题及知识点

    今天遇到的类型初始值设定项引发异常的原因是:类没有添加[Serializable]属性. this.DialogResult = System.Windows.Forms.DialogResult.O ...

  10. php封装数据库mysql, mysqli

    <?php header("content-type:text/html;charset=utf-8"); class db{    //私有的静态属性    private ...