给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数。

愚蠢的名字......
整体二分,影响因子就是矩阵里的数
把$\le mid$的矩阵元素加到二维树状数组里然后询问分成两组就行了
可以把矩阵元素权值排序后直接二分矩阵元素而不是值
复杂度$O(nlog^3n)$
用排序代替一维树状数组理论上更快,但需要把矩阵里的元素和查询放到一个数组里再排序貌似常数太大
然后发现黄学长的做法是错误的复杂度不对....但竟然比我快....
二维树状数组一定不要写错!!!
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=505,M=6e4+5,INF=1e9;
typedef long long ll;
inline int read(){char c=getchar();int x=0,f=1;while(c<'0'||c>'9'){if(c=='-')f=-1; c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0'; c=getchar();}return x*f;
}
int n,Q;
struct Factor{int x,y,v;Factor(){}Factor(int a,int b,int c):x(a),y(b),v(c){}bool operator <(const Factor &r)const{return v<r.v;}
}a[N*N];
int m,now=0;struct Query{int x1,y1,x2,y2,k;
}q[M];
int id[M],t1[M],t2[M],cur[M];int c[N][N];
inline int lowbit(int x){return x&-x;}
inline void add(int x,int y,int v){for(int i=x;i<=n;i+=lowbit(i))for(int j=y;j<=n;j+=lowbit(j)) c[i][j]+=v;
}
inline int sum(int x,int y){int re=0;for(int i=x;i;i-=lowbit(i))for(int j=y;j;j-=lowbit(j)) re+=c[i][j];return re;
}
inline int que(int i){int x1=q[i].x1-1,y1=q[i].y1-1,x2=q[i].x2,y2=q[i].y2;return sum(x2,y2)-sum(x1,y2)-sum(x2,y1)+sum(x1,y1);
}
int ans[M];
void Sol(int l,int r,int ql,int qr){if(ql>qr) return;if(l==r){for(int i=ql;i<=qr;i++) ans[id[i]]=a[l].v;return;}int mid=(l+r)>>1;for(int i=l;i<=mid;i++) add(a[i].x,a[i].y,1);int p1=0,p2=0;for(int i=ql;i<=qr;i++){int u=id[i],s=cur[u]+que(u);if(s>=q[u].k) t1[++p1]=u;else t2[++p2]=u,cur[u]=s;}for(int i=l;i<=mid;i++) add(a[i].x,a[i].y,-1);for(int i=1;i<=p1;i++) id[ql+i-1]=t1[i];for(int i=1;i<=p2;i++) id[ql+p1+i-1]=t2[i];Sol(l,mid,ql,ql+p1-1);Sol(mid+1,r,ql+p1,qr);
}
int main(){freopen("in","r",stdin);n=read();Q=read();for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) a[++m]=Factor(i,j,read());for(int i=1;i<=Q;i++) q[i].x1=read(),q[i].y1=read(),q[i].x2=read(),q[i].y2=read(),q[i].k=read();sort(a+1,a+1+m);for(int i=1;i<=Q;i++) id[i]=i;Sol(1,m,1,Q);for(int i=1;i<=Q;i++) printf("%d\n",ans[i]);
}

BZOJ 2738: 矩阵乘法 [整体二分]相关推荐

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

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

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

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

  3. 洛谷P1527 [国家集训队] 矩阵乘法 [整体二分,二维树状数组]

    题目传送门 矩阵乘法 题目描述 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. 输入输出格式 输入格式: 第一行两个数N,Q,表示矩阵大小和询问组数: 接下来N行N列一共N* ...

  4. BZOJ2738: 矩阵乘法(整体二分)

    Description 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. Input 第一行两个数N,Q,表示矩阵大小和询问组数: 接下来N行N列一共N*N个数,表示这个矩阵: ...

  5. P1527 [国家集训队]矩阵乘法 整体二分 + 二维树状数组

    传送门 题意: 思路: 算是个整体二分的板子啦,不过这个是二维的矩阵,我们只需要把一位树状数组改成二维的,让后动态维护单点加,区间查询前缀和即可. //#pragma GCC optimize(2) ...

  6. BZOJ.2161. 布娃娃【整体二分】

    传送门 NNN 个区间记为 [l,r][l,r][l,r]形式,魅力值,记为CiC_iCi​形式 NNN 个耐力值,记为 PiP_iPi​形式 求覆盖PiP_iPi​的区间内,魅力值第iii大是多少 ...

  7. bzoj 4009 接水果 整体二分

    Description 先给出一些盘子, 用路径x-y表示, 有权值 再有Q个询问, 表示水果, 用路径x-y表示 如果盘子是水果的子路径, 可以接住 对于每个水果, 输出可以接住它的盘子的第k小权 ...

  8. 十个利用矩阵乘法解决的经典题目

    出自matrix67.com 好像目前还没有这方面题目的总结.这几天连续看到四个问这类题目的人,今天在这里简单写一下.这里我们不介绍其它有关矩阵的知识,只介绍矩阵乘法和相关性质.     不要以为数学 ...

  9. 【转载】ACM中矩阵乘法的应用

    copied from  大神's blog 不要以为数学中的矩阵也是黑色屏幕上不断变化的绿色字符.在数学中,一个矩阵说穿了就是一个二维数组.一个n行m列的矩阵可以乘以一个m行p列的矩阵,得到的结果是 ...

最新文章

  1. 自动驾驶规划方法综述
  2. google nexus5 root 安装Xposed框架教程
  3. 【工具】公网临时大文件传输工具,文件发送,高速文件传输方法
  4. java 毕向东 内部类_java基础内部类(毕向东老师)
  5. 蓝桥杯省赛考点_【蓝桥杯单片机01】从历年决赛真题中寻找单片机常见的考点...
  6. aws linux 安装图形,linux – 用于安装AWS CLI工具的Bash脚本
  7. 腾讯PHP工程师面试题两份
  8. 实现自己的控制层do-c (仿Struts2和SpringMVC)(六)
  9. Acrobat Pro DC 教程,如何发送电子签名文件?
  10. Python新闻网站项目-9.Django前端HTML功能
  11. Opencv 轮廓提取
  12. 无线学习之mac80211专题-1-自适应速率控制算法
  13. Professor Forcing: A New Algorithm for Training Recurrent Networks翻译
  14. MySQL8版本 Win10忘记密码
  15. 转载:SolidWorks 2014 安装完成破解成功,用过一段时间后提示重新激活(win10系统)...
  16. 胜利大逃亡 --- bfs记录
  17. 帮我设计一个软件使用反馈调查问卷 详细
  18. ZooKeeper audit is enabled. Exiting JVM with code 4
  19. iphone13是双卡双待吗 苹果13支持5g网络吗
  20. antdvue走马灯一页显示多张图片的效果

热门文章

  1. java版电子商务spring cloud分布式微服务b2b2c社交电商(一)服务的注册与发现(Eureka)...
  2. UE4材质是什么样的机制
  3. WebDriver API 实例详解(二)
  4. Delphi非应用程序主窗口创建MDI
  5. 取名字_新生婴儿取名字大全2021
  6. perl删除文件_Perl小知识语法重点和数据类型
  7. vue 时间格式化函数_vue开发记录--通用时间格式函数
  8. python3.7.2安装与pycharm_Python3和PyCharm安装与环境配置【图文教程】
  9. java某个参数值设置为空_@PathVariable为空时指定默认值的操作
  10. java异常处理代码详解_Java异常处理机制总结