洛谷$P1527$ [国家集训队]矩阵乘法 整体二分
正解:整体二分
解题报告:
阿看到这种查询若干次第$k$小显然就想到整体二分$QwQ$?
然后现在就只要考虑怎么快速求出一个矩形内所有小于某个数的数的个数?
开始我的想法是离散化然后开个桶前缀和下,然后发现还要计入坐标,显然会$MLE$,就$GG$了$QwQ$
这时候考虑如果是一维,就可以直接树状数组,关于范围的限制可以提前对询问排个序就成.
然后现在是二维?所以用二维树状数组就成昂
然后就做完了?
$QwQ$
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define gc getchar()
#define ri register int
#define rb register bool
#define rc register char
#define lowbit(x) (x&(-x))
#define rp(i,x,y) for(ri i=x;i<=y;++i)
#define my(i,x,y) for(ri i=x;i>=y;--i)
#define lb(x) lower_bound(st+1,st+1+sum,x)-st const int N=6e5+,M=+,inf=1e9;
int n,m,st[N],nod_cnt,tr[M][M],sum;
struct node{int l1,r1,l2,r2,K,id,as;}nod[N],tmp1[N],tmp2[N]; il int read()
{
rc ch=gc;ri x=;rb y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il bool cmp(node gd,node gs){return gd.id<gs.id;}
il void modify(ri x,ri y,ri val)
{ri tmp=y;while(x<=n){y=tmp;while(y<=n)tr[x][y]+=val,y+=lowbit(y);x+=lowbit(x);}}
il int query(ri x,ri y)
{ri ret=,tmp=y;while(x){y=tmp;while(y)ret+=tr[x][y],y-=lowbit(y);x-=lowbit(x);}return ret;}
void solv(ri l,ri r,ri dat_l,ri dat_r)
{
if(l>r)return;
if(dat_l==dat_r){rp(i,l,r)nod[i].as=dat_l;return;}
ri mid=(dat_l+dat_r)>>,t1=,t2=;
rp(i,l,r)
{
if(!nod[i].id)if(nod[i].K<=mid)tmp1[++t1]=nod[i],modify(nod[i].l2,nod[i].r2,);else tmp2[++t2]=nod[i];
else
{
ri d=query(nod[i].l2,nod[i].r2)-query(nod[i].l1-,nod[i].r2)-query(nod[i].l2,nod[i].r1-)+query(nod[i].l1-,nod[i].r1-);
if(d>=nod[i].K)tmp1[++t1]=nod[i];else nod[i].K-=d,tmp2[++t2]=nod[i];
}
}
rp(i,l,r)if(!nod[i].id && nod[i].K<=mid)modify(nod[i].l2,nod[i].r2,-);
rp(i,,t1)nod[i+l-]=tmp1[i];rp(i,t1+,t1+t2)nod[i+l-]=tmp2[i-t1];
solv(l,l+t1-,dat_l,mid);solv(l+t1,r,mid+,dat_r);
} int main()
{
freopen("1527.in","r",stdin);freopen("1527.out","w",stdout);
n=read();m=read();rp(i,,n)rp(j,,n)++nod_cnt,nod[nod_cnt]=(node){,,i,j,st[nod_cnt]=read(),};
sort(st+,st++nod_cnt);sum=unique(st+,st++nod_cnt)-st-;rp(i,,nod_cnt)nod[i].K=lb(nod[i].K);
rp(i,,m){ri d1=read(),d2=read(),d3=read(),d4=read(),K=read();nod[++nod_cnt]=(node){d1,d2,d3,d4,K,nod_cnt};}
solv(,nod_cnt,,sum);
sort(nod+,nod+nod_cnt+,cmp);rp(i,,nod_cnt)if(nod[i].l1)printf("%d\n",st[nod[i].as]);
return ;
}
洛谷$P1527$ [国家集训队]矩阵乘法 整体二分的更多相关文章
- 洛谷P1527 [国家集训队] 矩阵乘法 [整体二分,二维树状数组]
题目传送门 矩阵乘法 题目描述 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. 输入输出格式 输入格式: 第一行两个数N,Q,表示矩阵大小和询问组数: 接下来N行N列一共N* ...
- P1527 [国家集训队]矩阵乘法 [整体二分]
权值排序,整体二分,没了. // by Isaunoya #include <bits/stdc++.h> using namespace std; #define rep(i, x, y ...
- Luogu1527 [国家集训队]矩阵乘法 (整体二分)(Unfinished)
全线RE的代码... 先搁这吧,下次再说.flag //#include <iostream> #include <cstdio> //#include <cstring ...
- [洛谷P1527] [国家集训队]矩阵乘法
洛谷题目链接:[国家集训队]矩阵乘法 题目背景 原 <补丁VS错误>请前往P2761 题目描述 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. 输入输出格式 输入 ...
- 洛谷 P1527 [国家集训队]矩阵乘法 解题报告
P1527 [国家集训队]矩阵乘法 题目描述 给你一个\(N*N\)的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第\(K\)小数. 输入输出格式 输入格式: 第一行两个数\(N,Q\),表示矩阵大 ...
- 【LG1527】[国家集训队]矩阵乘法
[LG1527][国家集训队]矩阵乘法 题面 洛谷 题解 我也不知道为什么取个这样的名字... 其实就是区间\(kth\)扩展到二维 还是用整体二分搞啦,把树状数组换成二维的 其他的基本没有什么差别 ...
- Luogu-1527 [国家集训队]矩阵乘法
Luogu-1527 [国家集训队]矩阵乘法 题面 Luogu-1527 题解 昨天学CDQ分治时做了一些题,但是因为题(wo)太(tai)水(lan)了(le)并没有整理 学了一晚上的整体二分,拿这 ...
- P1527 [国家集训队]矩阵乘法(整体二分)
Link 整体二分的经典例题. 对于整体二分,我个人的理解是二分答案套分治. 具体来说就是对答案进行二分,然后对于询问进行类似于权值线段树求区间第 \(k\) 大的分治做法. 首先,我们暴力做法就是对 ...
- P1527 [国家集训队]矩阵乘法
\(\color{#0066ff}{ 题目描述 }\) 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. \(\color{#0066ff}{输入格式}\) 第一行两个数N,Q ...
随机推荐
- 权重衰减(weight decay)与学习率衰减(learning rate decay)
本文链接:https://blog.csdn.net/program_developer/article/details/80867468“微信公众号” 1. 权重衰减(weight decay)L2 ...
- div+css布局的好处
改版的时候更方便,只需改动CSS文件 页面加载速度更快,结构清晰,页面简洁 表现与结构相分离 有利于SEO,排名更靠前
- Codeforces Round #172 (Div. 1 + Div. 2)
A. Word Capitalization 模拟. B. Nearest Fraction 枚举. C. Rectangle Puzzle 求出两个矩形的点,套简单多边形的面积交板子. D. Max ...
- PyTorch之前向传播函数自动调用forward
参考:1. pytorch学习笔记(九):PyTorch结构介绍 2.pytorch学习笔记(七):pytorch hook 和 关于pytorch backward过程的理解 3.Pytorch入门 ...
- 31页PPT:基于Spark的移动大数据挖掘
31页PPT:基于Spark的移动大数据挖掘 数盟11.16 Data Science Meetup(DSM北京)分享:基于Spark的移动大数据挖掘分享嘉宾:张夏天(TalkingData首席数据科 ...
- Postman接口测试工具学习笔记
- 新建测试接口 在Postman中有两种新建测试接口的方式,第一种是图片右上角的,点击可以选择 request 请求进行新建 选择 Request 以后会出现下面图片的对话框,让你输入一个保存接口的 ...
- Python--day26--复习
- springboot aop的使用 学习总结
版权声明:本文为博主武伟峰原创文章,转载请注明地址http://blog.csdn.net/tianyaleixiaowu. aop是spring的两大功能模块之一,功能非常强大,为解耦提供了非常优秀 ...
- python模块之模块导入
模块的导入 """ 模块的导入使用:模块导入一般都要放在代码的最上面 不同模块的导入顺序: 1 内置模块 2 扩展模块 3 自定义模块 """ ...
- ubuntu中桌面图标的配置
在网上随处可以找到怎么样把应用程序的图标放到桌面上,我刚用ubuntu时也是按照网上的做法,一步一步的做的,现将网上的做法复制下来: 桌面配置文件简述\label{sec:desktop file} ...