题目链接

BZOJ2738

题解

将矩阵中的位置取出来按权值排序
直接整体二分 + 二维BIT即可

#include<algorithm>
#include<iostream>
#include<cstdio>
#define LL long long int
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define lbt(x) (x & -x)
using namespace std;
const int maxn = 300005,maxm = 100005,INF = 0x3f3f3f3f;
inline int read(){int out = 0,flag = 1; char c = getchar();while (c < 48 || c > 57){if (c == '-') flag = 0; c = getchar();}while (c >= 48 && c <= 57){out = (out << 1) + (out << 3) + c - 48; c = getchar();}return flag ? out : -out;
}
struct node{int x,y,v;}e[maxn];
struct Que{int x1,y1,x2,y2,k,id;}q[maxn],t[maxn];
int b[maxn],bi,N,Q,n,tot,ans[maxn],s[505][505];
void add(int x,int y,int v){for (int i = x; i <= n; i += lbt(i))for (int j = y; j <= n; j += lbt(j))s[i][j] += v;
}
int query(int x,int y){int re = 0;for (int i = x; i; i -= lbt(i))for (int j = y; j; j -= lbt(j))re += s[i][j];return re;
}
int sum(int x1,int y1,int x2,int y2){return query(x2,y2) - query(x2,y1 - 1) - query(x1 - 1,y2) + query(x1 - 1,y1 - 1);
}
inline bool operator <(const node& a,const node& b){return a.v < b.v;
}
void solve(int l,int r,int L,int R){if (L > R) return;if (l == r){for (int i = L; i <= R; i++) ans[q[i].id] = e[l].v;return;}int mid = l + r >> 1,li = L,ri = R,v;for (int i = l; i <= mid; i++) add(e[i].x,e[i].y,1);for (int i = L; i <= R; i++){v = sum(q[i].x1,q[i].y1,q[i].x2,q[i].y2);if (v >= q[i].k) t[li++] = q[i];else q[i].k -= v,t[ri--] = q[i];}for (int i = L; i <= R; i++) q[i] = t[i];for (int i = l; i <= mid; i++) add(e[i].x,e[i].y,-1);solve(l,mid,L,li - 1); solve(mid + 1,r,ri + 1,R);
}
int main(){n = read(); Q = read();REP(i,n) REP(j,n) e[++N] = (node){i,j,b[++bi] = read()};REP(i,Q) q[i].x1 = read(),q[i].y1 = read(),q[i].x2 = read(),q[i].y2 = read(),q[i].k = read(),q[i].id = i;sort(b + 1,b + 1 + bi); tot = 1;for (int i = 2; i <= bi; i++) if (b[i] != b[tot]) b[++tot] = b[i];REP(i,N) e[i].v = lower_bound(b + 1,b + 1 + tot,e[i].v) - b;sort(e + 1,e + 1 + N);solve(1,N,1,Q);REP(i,Q) printf("%d\n",b[ans[i]]);return 0;
}

转载于:https://www.cnblogs.com/Mychael/p/9293353.html

BZOJ2738 矩阵乘法 【整体二分 + BIT】相关推荐

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

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

  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. BZOJ 2738: 矩阵乘法 [整体二分]

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

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

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

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

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

  7. [BZOJ2738]矩阵乘法

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

  8. [总结]CDQ分治整体二分

    从昨天到现在除了90%的颓废时间一直在研究一些分治的姿势,主要就是CDQ分治和整体二分. 首先推荐一些学习资料: 陈丹琦 <从 < Cash > 谈一类分治算法的应用> 许昊然 ...

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

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

最新文章

  1. 26.2. Web UI
  2. [置顶] JDK工具(零)--简要介绍JDK1.6自带的42个工具
  3. JAVA自动补全插件
  4. java基础提升篇:Java 序列化的高级认识
  5. Linux 串口编程分析
  6. 在Visual Studio中构建启动时申请管理员权限的程序(UAC支持)
  7. 湖人豪华助教团散伙 德帅身边恐仅剩两名帮手
  8. java 输入流关闭顺序_Java IO流中先关闭输出流还是先关闭输入流?为什么?
  9. 用户生命周期常用指标_生命周期管理工具如何使用指标
  10. 学习《让UpdatePanel支持文件上传》系列文章的相关链接
  11. 使用dva框架的总结
  12. Android OpenGL ES(十二):三维坐标系及坐标变换初步 .
  13. 通过mysqladmin监控MySQL数据的服务器状态
  14. 天地不仁,以万物为刍狗!
  15. 詹姆斯·格雷克《信息简史》读后感记录
  16. 计算机一级荷塘月色操作题,《荷塘月色》课后习题及答案
  17. Python 爬虫入门的教程(2小时快速入门、简单易懂、快速上手)
  18. Visual Studio Code最新1.66.0版下载
  19. xx:xx,xx:xx规则的字符串怎么解析呢
  20. 【网易2017春招】赶去公司 解题报告

热门文章

  1. 自学python推荐书籍知乎-据说是最丰富的程序员书籍资源,知乎数千人偷偷收藏!...
  2. python怎么安装pandas模块-如何优雅的安装Python的pandas?
  3. python下载网页里面所有的图片-python批量下载图片的三种方法
  4. 2!=5 or 0在python中是否正确-python 中 and or
  5. python花钱培训值吗-Python培训班学生刚学到70%就拿到月薪万元的Offer
  6. python下载软件-python下载工具
  7. python手机版安卓-用Python实现自动化操作Android手机
  8. python 加注拼音-Python 获取中文字拼音首个字母的方法
  9. python面向对象编程的优点-Python面向对象编程 一
  10. python语言能做什么软件-什么是Python语言,Python语言可以用来做什么?