P1527 [国家集训队]矩阵乘法

P1527 [国家集训队]矩阵乘法

题意:

给你一个 n×n 的矩阵,每次询问一个子矩形的第 k 小数。

题解:

整体二分稍微加强化
模板题是一个序列,现在升级成一个矩阵求,做法和原理都是一样的
使用整体二分解决的题目,首先要将所有的操作,包括插入、修改、删除和询问按照时间顺序打一个时间戳,存放在操作序列中,不妨称这个序列为 q 。
结果函数solve(l,r,L,R)表示操作序列上第[l,r]个询问的答案已经被确定在[L,R]的值域范围内
这题和模板的不同在于是二维的,所以树状数组也要是二维的
二维前缀和公式:
左上角是(x,y),右下角是(u,v)
ans=query(u,v)-query(x-1,v)-query(u,y-1)+query(x,y)
剩下过程和一维写法差不多,详细看代码
复杂度:O(QlogNlogNlog1e9)

代码:

#include<bits/stdc++.h>
#define debug(a,b) printf("%s = %d\n",a,b)
typedef long long ll;
using namespace std;inline int read(){int s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);return s*w;
}
const int M=1010000;
const int N=1e3+9;
struct node{int x,y,u,v,k,id;//第k小的数,第id个查询操作 node(int x=0,int y=0,int u=0,int v=0,int k=0,int id=0):x(x),y(y),u(u),v(v),k(k),id(id){}
}q[M],q1[M],q2[M];
int tot=0,n,m,tree[N][N],ans[M];
inline int lowbit(int x)
{return x&(-x);
}
inline void update(int x,int y,int v){for(int i=x;i<=n;i+=lowbit(i)){for(int j=y;j<=n;j+=lowbit(j)){tree[i][j]+=v;}}return ;
}
inline int query(int x,int y){int res=0;for(int i=x;i;i-=lowbit(i)){for(int j=y;j;j-=lowbit(j)){res+=tree[i][j];}}return res;
}
int Matquery(int x)
{/*     (u,y-1)(x,y)(x-1,v)		(u,v)*/return query(q[x].u,q[x].v)-query(q[x].x-1,q[x].v)-query(q[x].u,q[x].y-1)+query(q[x].x-1,q[x].y-1);
} 
inline void solve(int ql,int qr,int L,int R)
{if(ql>qr)return ;if(L==R){for(int i=ql;i<=qr;i++)if(q[i].id!=0)ans[q[i].id]=L;return ;}int len1=0,len2=0;int mid=L+R>>1;for(int i=ql;i<=qr;i++){if(q[i].id==0)//插入操作 {if(q[i].k<=mid){update(q[i].x,q[i].y,1);q1[++len1]=q[i];}else q2[++len2]=q[i];}else //查询操作 {int tmp=Matquery(i);if(tmp>=q[i].k){q1[++len1]=q[i];}else {q[i].k-=tmp;q2[++len2]=q[i];}}}for(int i=1;i<=len1;i++)q[ql+i-1]=q1[i];for(int i=1;i<=len2;i++)q[ql+len1+i-1]=q2[i];for(int i=ql;i<=ql+len1-1;i++){if(q[i].id==0&&q[i].k<=mid)update(q[i].x,q[i].y,-1);}solve(ql,ql+len1-1,L,mid);solve(ql+len1,qr,mid+1,R);
}
int main()
{cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){int x;cin>>x;q[++tot]=(node){i,j,0,0,x,0};}}for(int i=1;i<=m;i++){int x,y,a,b,k;cin>>x>>y>>a>>b>>k;q[++tot]=(node){x,y,a,b,k,i};}solve(1,tot,INT_MIN,INT_MAX);for(int i=1;i<=m;i++)printf("%d\n",ans[i]);return 0; 
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317392.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[LOJ #521]「LibreOJ β Round #3」绯色 IOI(抵达)(结论)

#521. 「LibreOJ β Round #3」绯色 IOI&#xff08;抵达&#xff09; description solution 因为点的庇护所不能为自身&#xff0c;题目背景在树上&#xff0c;有结论一定是两个相邻点互为庇护所 所以树一定要能两两完美匹配才有解 判断完有解后就是构造解了&#xff0c;…

UOJ#310-[UNR #2]黎明前的巧克力【FWT】

1# 正题 题目链接:https://uoj.ac/problem/310 题目大意 给出一个长度为nnn的序列&#xff0c;求有多少种方案找出两个集合S,TS,TS,T使得这两个集合的异或和相等。 1≤n≤1061\leq n\leq 10^61≤n≤106 解题思路 可以转换为找到一个异或和为000的集合SSS&#xff0c;产生2∣S…

ybtoj洛谷P4426:毒瘤(虚树,环套树,暴力)

传送门 解析 顾名思义&#xff0c;十分毒瘤 但有一说一&#xff0c;相对来说这题没有之前做的那两个黑题那么&#xff08;重读&#xff09;恶心 而且本题如果放在考场上&#xff0c;暴力枚举非树边的状态dp就可以拿到70分的好成绩&#xff08;改一改能改到75&#xff09; 现…

微软是如何使用 C# 重写 C# 编译器并将其开源的

Roslyn 是 C# 和 Visual Basic.NET 开源编译器的代号。这篇文章将介绍它是如何从微软过去的十年至暗时刻走出来&#xff0c;成为开源跨平台的 C# 和 VB 公共语言引擎。我于 2005 年加入微软&#xff0c;也就是在.NET 2.0 发布之前&#xff0c;当时微软内部已经开始在讨论 Rosly…

P3332 [ZJOI2013]K大数查询(整体二分做法)

P3332 [ZJOI2013]K大数查询 题意: 题解&#xff1a; 利用整体二分来做&#xff0c;这个题和P3834 【模板】可持久化线段树 2的区别在于本题的修改是区间修改&#xff0c;所以将里面的树状数组改成线段树就行&#xff0c;区间修改区间查询 但是不知道为什么我调了一阵子也不对…

[APIO2020]交换城市(交互+kruskal重构树)

[APIO2020]交换城市 description solution 如果u,vu,vu,v存在于一条链上&#xff08;只有两个点度数为111其余点度数为222&#xff09;则无解&#xff0c;否则必有解 如图&#xff0c;不管是哪个点度数>2>2>2&#xff0c;都可以有解 以蓝色为例&#xff0c;第二个…

P3320:寻宝游戏(生成树)

解析 大结论题… 实在是不知道这题和虚树有半毛钱关系吗… 引理 给出一个按照dfs排列的点集S{a1,a2…ak} 它们的极小联通子树的边权和的二倍等于∑dis(a1,a2)dis(a2,a3)...dis(ak−1,ak)dis(ak,a1)\sum dis(a_1,a_2)dis(a_2,a_3)...dis(a_k-1,a_k)dis(a_k,a_1)∑dis(a1​,a2​…

P5333-[JSOI2019]神经网络【dp,容斥】

正题 题目链接:https://www.luogu.com.cn/problem/P5333 题目大意 给出nnn棵树&#xff0c;第iii棵树有kik_iki​个点&#xff0c;每棵树上的每个点和其它树上的所有点都有连边。 求这棵树有多少条哈密顿回路。 答案对998244353998244353998244353取模。 ∑i1nki≤5000\sum…

如何在ASP.NET Core程序启动时运行异步任务(1)

原文&#xff1a;Running async tasks on app startup in ASP.NET Core (Part 1)作者&#xff1a;Andrew Lock译者&#xff1a;Lamond Lu背景当我们做项目的时候&#xff0c;有时候希望自己的ASP.NET Core应用在启动前执行一些初始化逻辑。例如&#xff0c;你希望验证配置是否合…

扫描线讲解

参考文章&#xff1a; 线段树扫描线&#xff08;有关扫描线的理解&#xff09; 线段树扫描线&#xff08;基本原理&#xff09; 扫描线 第二个文章里面的图很生动&#xff1a; 我总结一下就是&#xff1a;将所给图形的横坐标全部记录&#xff0c;纵坐标记录为扫描线 然后对与…

P5400-[CTS2019]随机立方体【二项式反演,计数】

正题 题目链接:https://www.luogu.com.cn/problem/P5400 题目大意 有一个nmln\times m\times lnml的三维网格&#xff0c;要在每个格子处填上一个数&#xff0c;要求填的数中1∼nml1\sim n\times m\times l1∼nml都恰好出现了一次。 一个极大值被定义为这个格子比其他与它至…

「CEOI2019」魔法树(DP+差分启发式合并)

「CEOI2019」魔法树 description solution 设dpi,j:idp_{i,j}:idpi,j​:i子树在jjj时刻的最大果汁量&#xff0c;显然dpi,jdp_{i,j}dpi,j​在jjj是单调递增的 dpi,jmax⁡(dpi,j,dpi,j−1)dp_{i,j}\max(dp_{i,j},dp_{i,j-1})dpi,j​max(dpi,j​,dpi,j−1​) iii不收获 dpi,j∑…

梁迪:我为MVP骄傲,《微软最有价值专家奖励计划介绍》附专题视频

题记&#xff1a;有些事情&#xff0c;比 MVP 更加不朽&#xff0c;浩气长空&#xff0c;日月星汉&#xff0c;我们为 MVP 和那些心目中的“MVP”感到骄傲。微软 MVP 是一种追求&#xff0c;不必要去强求&#xff0c;但 MVP 必定是俱乐部发展的根基础。火车跑得快全凭车头带&am…

CF1472(div3):总结

文章目录前言A. Cards for Friends题意简述解析代码B. Fair Division题意简述解析代码C. Long Jumps题意简述解析代码D. Even-Odd Game题意简述解析代码E. Correct Placement题意简述解析代码F. New Years Puzzle题意简述解析代码G. Moving to the Capital题意简述解析代码前言…

How Much Memory Your Code Is Using? Gym - 101955J

How Much Memory Your Code Is Using? Gym - 101955J 题意&#xff1a; t组数据&#xff0c;每组数据会有n个定义类型的方式&#xff0c;给你每个类型所占字节&#xff0c;问一共占了多少字节&#xff0c;最终答案按照Kibibyte单位输出&#xff0c;并向上取整 题解&#xf…

P3295 [SCOI2016]萌萌哒(DP+倍增)

P3295 [SCOI2016]萌萌哒 description solution 强制部分区间相同&#xff0c;很容易就想到了并查集&#xff0c;直接暴力并查集合并是O(n2)O(n^2)O(n2)的 只需要考虑那一个数据结构将其转化成O(nlog⁡n)O(n\log n)O(nlogn)的 树之类的就不考虑了&#xff0c;一段一段的区间…

CF1677D-Tokitsukaze and Permutations【结论】

正题 题目链接:https://www.luogu.com.cn/problem/CF1677D 题目大意 对于一个排列pip_ipi​&#xff0c;定义一个序列vF(p)vF(p)vF(p)&#xff0c;其中vi∑j1i−1[pj>pi]v_i\sum_{j1}^{i-1}[p_j>p_i]vi​∑j1i−1​[pj​>pi​]。 一次冒泡排序为依次对1∼n−11\sim…

【恭贺新春】2019年春节放假

2019年放假通知致全体微友&#xff1a; 2019年2月5日&#xff08;正月初一&#xff09;至2月8日&#xff08;正月初四&#xff09;春节放假&#xff0c;共4天&#xff0c;小编停止更新公众号信息。敬请相互转告。值此新春佳节到来之际&#xff0c;“dotNet跨平台”给大家拜个…

模板:圆方树

所谓圆方树&#xff0c;就是又圆又方的树 &#xff08;逃&#xff09; 前言 树有很多良好的性质&#xff0c;也可以上许多算法和数据结构 但我们对于一般图却没有太多办法… 然而&#xff0c;对于有些关注连同性、路径并&交的一般图问题&#xff0c;我们可以用圆方树&…

C - Insertion Sort Gym - 101955C

C - Insertion Sort Gym - 101955C 题意&#xff1a; t组数据&#xff0c;每组数据给你n&#xff0c;k&#xff0c;q&#xff0c;让你求存在多少合法的1~n排列 合法要求&#xff1a; 对排列的前k项进行排序&#xff0c;使得整个序列中最长的递增子序列长度为n-1 题解&#x…