BZOJ 2738: 矩阵乘法 [整体二分]
愚蠢的名字......
#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: 矩阵乘法 [整体二分]相关推荐
- BZOJ.2738.矩阵乘法(整体二分 二维树状数组)
题目链接 BZOJ 洛谷 整体二分.把求序列第K小的树状数组改成二维树状数组就行了. 初始答案区间有点大,离散化一下. 因为这题是一开始给点,之后询问,so可以先处理该区间值在l~mid的修改,再处理 ...
- 【BZOJ2738】矩阵乘法 [整体二分][树状数组]
矩阵乘法 Time Limit: 20 Sec Memory Limit: 256 MB [Submit][Status][Discuss] Description 给你一个N*N的矩阵,不用算矩阵 ...
- 洛谷P1527 [国家集训队] 矩阵乘法 [整体二分,二维树状数组]
题目传送门 矩阵乘法 题目描述 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. 输入输出格式 输入格式: 第一行两个数N,Q,表示矩阵大小和询问组数: 接下来N行N列一共N* ...
- BZOJ2738: 矩阵乘法(整体二分)
Description 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. Input 第一行两个数N,Q,表示矩阵大小和询问组数: 接下来N行N列一共N*N个数,表示这个矩阵: ...
- P1527 [国家集训队]矩阵乘法 整体二分 + 二维树状数组
传送门 题意: 思路: 算是个整体二分的板子啦,不过这个是二维的矩阵,我们只需要把一位树状数组改成二维的,让后动态维护单点加,区间查询前缀和即可. //#pragma GCC optimize(2) ...
- BZOJ.2161. 布娃娃【整体二分】
传送门 NNN 个区间记为 [l,r][l,r][l,r]形式,魅力值,记为CiC_iCi形式 NNN 个耐力值,记为 PiP_iPi形式 求覆盖PiP_iPi的区间内,魅力值第iii大是多少 ...
- bzoj 4009 接水果 整体二分
Description 先给出一些盘子, 用路径x-y表示, 有权值 再有Q个询问, 表示水果, 用路径x-y表示 如果盘子是水果的子路径, 可以接住 对于每个水果, 输出可以接住它的盘子的第k小权 ...
- 十个利用矩阵乘法解决的经典题目
出自matrix67.com 好像目前还没有这方面题目的总结.这几天连续看到四个问这类题目的人,今天在这里简单写一下.这里我们不介绍其它有关矩阵的知识,只介绍矩阵乘法和相关性质. 不要以为数学 ...
- 【转载】ACM中矩阵乘法的应用
copied from 大神's blog 不要以为数学中的矩阵也是黑色屏幕上不断变化的绿色字符.在数学中,一个矩阵说穿了就是一个二维数组.一个n行m列的矩阵可以乘以一个m行p列的矩阵,得到的结果是 ...
最新文章
- 自动驾驶规划方法综述
- google nexus5 root 安装Xposed框架教程
- 【工具】公网临时大文件传输工具,文件发送,高速文件传输方法
- java 毕向东 内部类_java基础内部类(毕向东老师)
- 蓝桥杯省赛考点_【蓝桥杯单片机01】从历年决赛真题中寻找单片机常见的考点...
- aws linux 安装图形,linux – 用于安装AWS CLI工具的Bash脚本
- 腾讯PHP工程师面试题两份
- 实现自己的控制层do-c (仿Struts2和SpringMVC)(六)
- Acrobat Pro DC 教程,如何发送电子签名文件?
- Python新闻网站项目-9.Django前端HTML功能
- Opencv 轮廓提取
- 无线学习之mac80211专题-1-自适应速率控制算法
- Professor Forcing: A New Algorithm for Training Recurrent Networks翻译
- MySQL8版本 Win10忘记密码
- 转载:SolidWorks 2014 安装完成破解成功,用过一段时间后提示重新激活(win10系统)...
- 胜利大逃亡 --- bfs记录
- 帮我设计一个软件使用反馈调查问卷 详细
- ZooKeeper audit is enabled. Exiting JVM with code 4
- iphone13是双卡双待吗 苹果13支持5g网络吗
- antdvue走马灯一页显示多张图片的效果
热门文章
- java版电子商务spring cloud分布式微服务b2b2c社交电商(一)服务的注册与发现(Eureka)...
- UE4材质是什么样的机制
- WebDriver API 实例详解(二)
- Delphi非应用程序主窗口创建MDI
- 取名字_新生婴儿取名字大全2021
- perl删除文件_Perl小知识语法重点和数据类型
- vue 时间格式化函数_vue开发记录--通用时间格式函数
- python3.7.2安装与pycharm_Python3和PyCharm安装与环境配置【图文教程】
- java某个参数值设置为空_@PathVariable为空时指定默认值的操作
- java异常处理代码详解_Java异常处理机制总结