DescriptionDescriptionDescription

无修子矩阵第kkk大

数据范围:n,m≤500n,m\leq 500n,m≤500


SolutionSolutionSolution

整体二分+二维树状数组当然你也可以大数据结构

solve(l,r,L,R)solve(l,r,L,R)solve(l,r,L,R),表示在[l,r][l,r][l,r]范围中,与操作[L,R][L,R][L,R]有关(不一定对应原来的操作)

如果原矩阵的数≤mid\leq mid≤mid,就在二维树状数组对应位置+1,如果碰到询问操作,那么查询区间[ql,qr][ql,qr][ql,qr]的值,相当于查询[l,mid][l,mid][l,mid]中树状数组的值,如果≤k\leq k≤k,则答案在[mid+1,r][mid+1,r][mid+1,r]中,此时把kkk减去对应的个数【参照权值线段树】,否则答案就在左边,分治处理即可

时间复杂度:O(n2log2n2)O(n^2 log^2n^2)O(n2log2n2)【大概吧】


CodeCodeCode

#include<cstdio>
#include<cctype>
#include<algorithm>
#define LL long long
using namespace std;int n,m,cnt;
inline LL read()
{LL f=0,d=1;char c; while(c=getchar(),!isdigit(c)) if(c=='-') d=-1;f=(f<<3)+(f<<1)+c-48;while(c=getchar(),isdigit(c)) f=(f<<3)+(f<<1)+c-48;return d*f;
}
struct node{int x1,y1,x2,y2,k,id;}q[320011],q1[320010],q2[320011];
int ans[60010],c[501][501];
inline void add(int x,int y,int d)
{for(register int i=x;i<=n;i+=i&-i)for(register int j=y;j<=n;j+=j&-j)c[i][j]+=d;return;
}
inline int ask(int x,int y)
{if(!x||!y) return 0;int ans=0;for(register int i=x;i;i-=i&-i)for(register int j=y;j;j-=j&-j)ans+=c[i][j];return ans;
}
inline int sum(int x1,int y1,int x2,int y2){return ask(x2,y2)-ask(x2,y1-1)-ask(x1-1,y2)+ask(x1-1,y1-1);}
inline void solve(int l,int r,int L,int R)
{if(L>R) return;if(l==r){for(register int i=L;i<=R;i++) if(q[i].id) ans[q[i].id]=l;return;}int mid=l+r>>1,cnt1=0,cnt2=0;for(register int i=L;i<=R;i++){if(q[i].id==0){if(q[i].k<=mid) add(q[i].x1,q[i].y1,1),q1[++cnt1]=q[i];else q2[++cnt2]=q[i];}else{int x=sum(q[i].x1,q[i].y1,q[i].x2,q[i].y2);if(x>=q[i].k) q1[++cnt1]=q[i];else q[i].k-=x,q2[++cnt2]=q[i];}}for(register int i=1;i<=cnt1;i++) if(q1[i].id==0) add(q1[i].x1,q1[i].y1,-1);for(int i=L;i<=L+cnt1-1;i++) q[i]=q1[i-L+1];for(int i=L+cnt1;i<=R;i++) q[i]=q2[i-L-cnt1+1];solve(l,mid,L,L+cnt1-1);solve(mid+1,r,L+cnt1,R);return;
}
signed main()
{n=read();m=read();for(register int i=1;i<=n;i++)for(register int j=1;j<=n;j++)q[++cnt]=(node){i,j,0,0,read(),0};for(register int i=1;i<=m;i++){q[++cnt].x1=read();q[cnt].y1=read();q[cnt].x2=read();q[cnt].y2=read();q[cnt].k=read();q[cnt].id=i;}solve(0,1e9,1,cnt);for(register int i=1;i<=m;i++) printf("%d\n",ans[i]);
}

P1527,JZOJ 2908【集训队互测 2012】矩阵乘法(mat)相关推荐

  1. jzoj2908,P1527-[集训队互测 2012]矩阵乘法【整体二分,二维树状数组】

    正题 题目链接:https://www.luogu.org/problem/P1527 题目大意 给出一个矩阵,每个询问求子矩阵中的第kkk小数. 解题思路 我们发现我们对于每个询问我们可以二分答案, ...

  2. jzoj 2867. 【集训队互测 2012】Contra

    Description 偶然间,chnlich 发现了他小时候玩过的一个游戏"魂斗罗",于是决定怀旧.但是这是一个奇怪的魂斗罗 MOD. 有 N 个关卡,初始有 Q 条命. 每通过 ...

  3. 洛谷 P4463 [集训队互测 2012] calc(拉格朗日插值优化DP)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://www.luogu.com.cn/problem/P4463 Prob ...

  4. UOJ#191. 【集训队互测2016】Unknown

    UOJ#191. [集训队互测2016]Unknown 题目描述 Solution 二进制分组. 每一个组内维护一个斜率单调减的凸包. 因为有删点,避免出现反复横跳产生的爆炸复杂度,需要等到同一深度的 ...

  5. [2015国家集训队互测]口胡

    比赛链接 http://uoj.ac/contest/11 口胡题解 A.[集训队互测2015]Robot 直接果断打暴力了...这个暴力很好写,我就不废话了 B.[集训队互测2015]Marketi ...

  6. 「2019 集训队互测 Day 1」最短路径 解题报告

    一.题目概述 题目链接:Libre OJ. 给出一张图,求出 ans=∑i=1n∑j=1n[i≠j]dk(i,j)ans=\sum_{i=1}^n\sum_{j=1}^n[i\ne j]\texttt ...

  7. 【LOJ3077】「2019 集训队互测 Day 4」绝目编诗

    [题目链接] 点击打开链接 [思路要点] 不难发现各个边双连通分量可以分开处理,桥边可以直接删除. 可以证明,对于每一个边双连通分量,当 M−NM-NM−N 超过 O(N)O(\sqrt{N})O(N ...

  8. EZ 2018 05 06 NOIP2018 慈溪中学集训队互测(五)

    享受爆零的快感 老叶本来是让初三的打的,然后我SB的去凑热闹了 TM的T2写炸了(去你妹的优化),T1连-1的分都忘记判了,T3理所当然的不会 光荣革命啊! T1 思维图论题,CHJ dalao给出了 ...

  9. 【集训队互测2015】最大异或和

    首先不知道有没有神仙线段树分治过的. 首先一个较为显然的性质: \[ \mathrm{Span}\{v_1, v_2, \dots, v_n\} = \mathrm{Span}\{v_1, v_2 - ...

  10. 【uoj#94】【集训队互测2015】胡策的统计(集合幂级数)

    题目传送门:http://uoj.ac/problem/94 这是一道集合幂级数的入门题目.我们先考虑求出每个点集的连通生成子图个数,记为$g_S$,再记$h_S$为点集$S$的生成子图个数,容易发现 ...

最新文章

  1. Windows 2008 R2 Powershell 3.0
  2. shutdown()函数:优雅地断开TCP连接
  3. FineReport——获取控件值和单元格值
  4. 2021宁夏英语高考成绩查询,2021宁夏高考成绩官方查询时间及入口
  5. 北风网09.接收普通消息2
  6. php环行队列实现,java数组实现队列及环形队列实现过程解析
  7. 免费开源:人人必备的数据分析技能
  8. hdu-acm steps 命运
  9. mysql日志文件架构_mysql日志文件
  10. Paypal开源nodejs框架研究(二)KrakenJs之Enrouten
  11. typec扩展坞hdmi没反应_HDMI+两个USB接口,让surface秒变办公神器?这个扩展坞真香...
  12. 计算机毕业设计之流浪宠物管理系统
  13. Echarts地图的基本使用方法
  14. 基于python的三维射线追踪库-ttcrpy详解(1)
  15. 机器学习-DBSCAN聚类算法
  16. html背景图片半透明写法,CSS实现背景图片透明而文字不透明效果的两种方法
  17. python 热度图_keras CNN卷积核可视化,热度图教程
  18. 【stm32c8t6+esp8266上传温湿度到Onenet云平台】
  19. linux系统内存dump机制介绍(一)--kdump
  20. 线性动态系统LDS(别名:卡尔曼滤波)

热门文章

  1. markdown使用文档(Typora 快捷键)
  2. 3D游戏案例:滚动天空(超低配版)
  3. Python学习第二课-----绘制股票K线图(不使用mpl_finance包)
  4. 八爪鱼 ajax 循环采集,网页数据采集五大循环方式详解 - 八爪鱼采集器
  5. cad插入块_CAD中创建块与写块的区别总结
  6. 深入浅出的讲解傅里叶变换(原文作者 韩昊)
  7. Hiho1384 倍增+归并排序
  8. CentOS7安装谷歌浏览器
  9. ps剪贴蒙版教程(ps创建剪贴蒙版步骤)
  10. word中图片为嵌入式格式时显示不全_word插入图片嵌入式 word图片显示不全