A1333. 矩阵乘法(梁 盾)
时间限制:2.0s   内存限制:256.0MB  
总提交次数:515   AC次数:211   平均分:54.14
 
将本题分享到:
      
试题来源
  2012中国国家集训队命题答辩
问题描述
  给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数。
输入格式
  第一行两个数N,Q,表示矩阵大小和询问组数;
  接下来N行N列一共N*N个数,表示这个矩阵;
  再接下来Q行每行5个数描述一个询问:x1,y1,x2,y2,k表示找到以(x1,y1)为左上角、以(x2,y2)为右下角的子矩形中的第K小数。
输出格式
  对于每组询问输出第K小的数。
样例输入
2 2
2 1
3 4
1 2 1 2 1
1 1 2 2 3
样例输出
1
3
数据规模和约定
  矩阵中数字是109以内的非负整数;
  20%的数据:N<=100,Q<=1000;
  40%的数据:N<=300,Q<=10000;
  60%的数据:N<=400,Q<=30000;
  100%的数据:N<=500,Q<=60000。
 
poj2104 k-th的二维拓展,开个二维树状数组即可!
#include<cstdio>
#include<iostream>
using namespace std;
inline int read(){
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
const int N=,Z=3.5e5+;
const int inf=2e9;
struct node{
int x1,x2,y1,y2,k,opt,id;
}p[Z],p1[Z],p2[Z];
int n,m,tot,BIT[N][N],ans[Z];
int mx,mn;
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)){
BIT[i][j]+=v;
}
}
}
inline int query(int x,int y){
int res=;
for(int i=x;i;i-=lowbit(i)){
for(int j=y;j;j-=lowbit(j)){
res+=BIT[i][j];
}
}
return res;
}
void solve(int l,int r,int x,int y){
if(l>r||x>y) return ;
if(x==y){
for(int i=l;i<=r;i++) if(p[i].opt) ans[p[i].id]=x;
return ;
}
int mid=x+y>>,i,t1(),t2(),tt();
for(i=l;i<=r;i++){
if(!p[i].opt){
if(p[i].k<=mid){
p1[++t1]=p[i];
update(p1[t1].x1,p1[t1].y1,);
}
else{
p2[++t2]=p[i];
}
}
else{
tt=query(p[i].x2,p[i].y2)-query(p[i].x1-,p[i].y2)-query(p[i].x2,p[i].y1-)+query(p[i].x1-,p[i].y1-);
if(p[i].k<=tt){
p1[++t1]=p[i];
}
else{
p[i].k-=tt;
p2[++t2]=p[i];
}
}
}
for(i=;i<=t1;i++) if(!p1[i].opt) update(p1[i].x1,p1[i].y1,-);
for(i=;i<=t1;i++) p[l+i-]=p1[i];
for(i=;i<=t2;i++) p[l+t1+i-]=p2[i];
solve(l,l+t1-,x,mid);
solve(l+t1,r,mid+,y); }
int main(){
mx=-inf;mn=inf;
n=read();m=read();
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
p[++tot].opt=;
p[tot].x1=i;
p[tot].y1=j;
p[tot].k=read();
mx=max(mx,p[tot].k);
mn=min(mn,p[tot].k);
}
}
for(int i=;i<=m;i++){
p[++tot].opt=;
p[tot].x1=read();
p[tot].y1=read();
p[tot].x2=read();
p[tot].y2=read();
p[tot].k=read();
p[tot].id=i;
}
solve(,tot,mn,mx);
for(int i=;i<=m;i++) printf("%d\n",ans[i]);
return ;
}

tsinsen A1333. 矩阵乘法(梁 盾)的更多相关文章

  1. 【清澄A1333】【整体二分+二维树状数组】矩阵乘法(梁盾)

    试题来源 2012中国国家集训队命题答辩 问题描述 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. 输入格式 第一行两个数N,Q,表示矩阵大小和询问组数: 接下来N行N列一共 ...

  2. tsinsen A1333. 矩阵乘法

    题目链接:传送门 题目思路:整体二分(二分的是答案,附带的是操作) 把矩阵中的元素对应成插入操作,然后就有插入和询问操作. 然后根据插入操作对于答案的影响,询问操作所匹配的符合答案个数,将操作分为两段 ...

  3. 【BZOJ】【2738】&【Tsinsen】【A1333】矩阵乘法

    整体二分+树状数组 过了[BZOJ][2527][POI2011]Meteors以后这题就没那么难啦~ 关键是[从小到大]依次插入数字,然后整体二分每个查询的第k大是在第几次插入中被插入的……嗯大概就 ...

  4. *HDU2254 矩阵乘法

    奥运 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submissi ...

  5. *HDU 1757 矩阵乘法

    A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  6. CH Round #30 摆花[矩阵乘法]

    摆花 CH Round #30 - 清明欢乐赛 背景及描述 艺术馆门前将摆出许多花,一共有n个位置排成一排,每个位置可以摆花也可以不摆花.有些花如果摆在相邻的位置(隔着一个空的位置不算相邻),就不好看 ...

  7. POJ3070 Fibonacci[矩阵乘法]

    Fibonacci Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13677   Accepted: 9697 Descri ...

  8. bzoj 2738 矩阵乘法

    其实这题跟矩阵乘法没有任何卵关系,直接整体二分,用二维树状数组维护(刚刚学会>_<),复杂度好像有点爆炸(好像有十几亿不知道是不是算错了),但我们不能怂啊23333. #include&l ...

  9. 【BZOJ-2476】战场的数目 矩阵乘法 + 递推

    2476: 战场的数目 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 58  Solved: 38[Submit][Status][Discuss] D ...

随机推荐

  1. perl学习笔记——哈希

    哈希 哈希是一种数据结构,它和数组的相似之处在于可以容难任意多的值并能按需取用,而他和数组的不同在于索引的方式,数组是以数字为索引而哈希则是以名字为索引. 哈希的键是唯一的,哈希的值可以重复. 哈希的 ...

  2. 【Swift】学习笔记(三)——字符和字符串

    基本了解了变量的创建和基础数据类型,但是在开发中用得最多的还是字符串.那什么是字符串呢? Swift 的String类型表示特定序列的Character(字符) 类型值的集合,它是值类型具有可变性 S ...

  3. 【Java】Java_04 HelloWorld提升

    HelloWorld的总结与提升 1.Java对大小写敏感,如果出现了大小写拼写错误,程序无法运行 2.关键字public被称作访问修饰符(access modifier),用于控制程序的其它部分对这 ...

  4. JS的同步加载、异步加载

    在使用js展开式菜单时,发现只有加载完页面包含的js文件时,展开菜单才能折叠起来. 查找了一下原因:是因为js页面加载使用的是同步模式,又称阻塞模式,会阻止浏览器的后续处理,停止后续的解析,只有当当前 ...

  5. Android应用中使用百度地图API之POI(三)

    先看执行后的图吧: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWFqaWFuamll/font/5a6L5L2T/fontsize/400/fill/ ...

  6. Atitit. Toast alert loading js控件   atiToast v2新特性

    Atitit. Toast alert loading js控件   atiToast v2新特性 1. 连续多个txt追加的原理 var txt = document.createElement(& ...

  7. Verilog HDL test bench 문법에 관한

    16bit ripple carry adder test bench `timescale 1ns/1ns module testbench2; reg [15:0] a, [15:0] b, c_ ...

  8. javascript (function() { /* code */ })() 自执行函数

    (function(){ function a(){ alert("a"); } })(); 自执行匿名函数: 常见格式:(function() { /* code */ })() ...

  9. shell实现洗牌随机

    洗牌问题: 洗一副扑克,有什么好办法?既能洗得均匀,又能洗得快?即相对于一个文件来说怎样 高效率的实现乱序排列? 关于洗牌问题,其实已经有了一个很好的shell解法,这里另外给三个基于AWK的方法, ...

  10. Could not calculate build plan

    问题:根据你提供的镜像地址,下载相应的jar包失败 原因: 1.你提供的镜像地址不稳定,把settings.xml文件中的mirror改成稳定的镜像地址 2.网络不稳定,重新下载,或者切换网络.