tsinsen A1333. 矩阵乘法
题目链接:传送门

题目思路:整体二分(二分的是答案,附带的是操作)
把矩阵中的元素对应成插入操作,然后就有插入和询问操作。
然后根据插入操作对于答案的影响,询问操作所匹配的符合答案个数,将操作分为两段,继续递归。。。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <stack>
#include <cctype>
#include <queue>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <climits>
#define lson rt<<1,l,mid
#define rson rt<<1|1,mid+1,r
#define fi first
#define se second
#define ping(x,y) ((x-y)*(x-y))
#define mst(x,y) memset(x,y,sizeof(x))
#define mcp(x,y) memcpy(x,y,sizeof(y))
using namespace std;
#define gamma 0.5772156649015328606065120
#define MOD 1000000007
#define inf 0x3f3f3f3f
#define N 60005
#define maxn 1000005
typedef pair<int,int> PII;
typedef long long LL; int n,m,k,len,S,T;
int ans[N];
struct Node{
int id,x,y,a,b,v,f;
Node(){}
Node(int _id,int _x,int _y,int _a,int _b,int _v,int _f):
id(_id),x(_x),y(_y),a(_a),b(_b),v(_v),f(_f){}
}node[maxn],t1[maxn],t2[maxn];
int tree[][];
void add(int x,int y,int v){for(int i=x;i<=n;i+=(i&-i))for(int j=y;j<=n;j+=(j&-j))tree[i][j]+=v;}
int get(int x,int y){
int res=;
for(int i=x;i;i-=(i&-i))for(int j=y;j;j-=(j&-j))res+=tree[i][j];
return res;
}
int query(int x,int y,int a,int b){return get(a,b)+get(x,y)-get(x,b)-get(a,y);}
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(node[i].f==)
ans[node[i].id]=l;
return;
}
int len1=,len2=,mid=l+r>>;
for(int i=ql;i<=qr;++i){
if(node[i].f==){
if(node[i].v<=mid){
add(node[i].x,node[i].y,);
t1[len1++]=node[i];
}
else t2[len2++]=node[i];
}
else{
int pos=query(node[i].x-,node[i].y-,node[i].a,node[i].b);
if(pos<node[i].v){node[i].v-=pos;t2[len2++]=node[i];}
else{
t1[len1++]=node[i];
}
}
}
for(int i=ql;i<=qr;++i)if(node[i].f==&&node[i].v<=mid)add(node[i].x,node[i].y,-);
for(int i=;i<len1;++i)node[i+ql]=t1[i];
for(int i=;i<len2;++i)node[i+ql+len1]=t2[i];
solve(ql,ql+len1-,l,mid);solve(ql+len1,qr,mid+,r);
}
int main(){
int i,j,group,x,y,x1,y1,Case=;
scanf("%d%d",&n,&m);
int _min=INT_MAX,_max=INT_MIN;
for(i=;i<=n;++i)for(j=;j<=n;++j){
scanf("%d",&x);
_min=min(_min,x);
_max=max(_max,x);
node[++len]=Node(len,i,j,,,x,);
}
for(i=;i<=m;++i){
scanf("%d%d%d%d%d",&x,&y,&x1,&y1,&k);
node[++len]=Node(i,x,y,x1,y1,k,);
}
solve(,len,_min,_max);
for(i=;i<=m;++i)printf("%d\n",ans[i]);
return ;
}
tsinsen A1333. 矩阵乘法的更多相关文章
- tsinsen A1333. 矩阵乘法(梁 盾)
A1333. 矩阵乘法(梁 盾) 时间限制:2.0s 内存限制:256.0MB 总提交次数:515 AC次数:211 平均分:54.14 将本题分享到: 查看未格式化 ...
- 【BZOJ】【2738】&【Tsinsen】【A1333】矩阵乘法
整体二分+树状数组 过了[BZOJ][2527][POI2011]Meteors以后这题就没那么难啦~ 关键是[从小到大]依次插入数字,然后整体二分每个查询的第k大是在第几次插入中被插入的……嗯大概就 ...
- 【清澄A1333】【整体二分+二维树状数组】矩阵乘法(梁盾)
试题来源 2012中国国家集训队命题答辩 问题描述 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. 输入格式 第一行两个数N,Q,表示矩阵大小和询问组数: 接下来N行N列一共 ...
- *HDU2254 矩阵乘法
奥运 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submissi ...
- *HDU 1757 矩阵乘法
A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- CH Round #30 摆花[矩阵乘法]
摆花 CH Round #30 - 清明欢乐赛 背景及描述 艺术馆门前将摆出许多花,一共有n个位置排成一排,每个位置可以摆花也可以不摆花.有些花如果摆在相邻的位置(隔着一个空的位置不算相邻),就不好看 ...
- POJ3070 Fibonacci[矩阵乘法]
Fibonacci Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13677 Accepted: 9697 Descri ...
- bzoj 2738 矩阵乘法
其实这题跟矩阵乘法没有任何卵关系,直接整体二分,用二维树状数组维护(刚刚学会>_<),复杂度好像有点爆炸(好像有十几亿不知道是不是算错了),但我们不能怂啊23333. #include&l ...
- 【BZOJ-2476】战场的数目 矩阵乘法 + 递推
2476: 战场的数目 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 58 Solved: 38[Submit][Status][Discuss] D ...
随机推荐
- jquery 实现菜单的下拉菜单
实现效果如图: 源码: 到此下载
- js调用打印机 打印整体或部分
有时前端的项目中需要添加打印的功能,首先要知道打印分为整体打印和局部打印两种,而局部打印又可细分为局部打印指定的部分,和局部打印指定部分之外的部分.实例比文字看起来更清晰,下面我将用代码来描述 1.整 ...
- C#指南,重温基础,展望远方!(2)程序结构
C# 中的关键组织结构概念包括程序.命名空间.类型.成员和程序集. C# 程序由一个或多个源文件组成. 程序声明类型,而类型则包含成员,并被整理到命名空间中. 类型示例包括类和接口. 成员示例包括字段 ...
- Js日常笔记之this
在javascript中自己创建构造函数时可以利用this来指向新创建的对象上.这样就可以避免函数中的this指向全局了,如下 var x = 2; function test(){ this.x = ...
- mysql中实现分类汇总功能
1.创建测试表: CREATE TABLE test_ROLLUP_1 ( StateCode ), DepCode ), SendMoney INT ); 2.插入测试语句: INSERT INTO ...
- 统一修改 UINavigationBar backItem
{ UINavigationBar * navigationBar = [UINavigationBar appearance]; //返回按钮的箭头颜色 [navigationBar setTint ...
- 第一篇:初识python
1.python介绍 Python, 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年. Python的官方介绍是: ...
- nginx整合php+lua+oracle环境搭建
nginx整合php+lua+oracle环境搭建 标签: nginxluaoraclephplinux -- : 1473人阅读 评论() 收藏 举报 分类: 技术() 版权声明:本文为博主原创文章 ...
- 微信小程度腾讯地图SDK使用方法
在开发过程中,不少人肯定遇到过要用到地图,那么在小程序里,腾讯也给出了相应的SDK供我们来使用.那么接下来,就介绍下如何使用该SDK实现获取经纬度然后显示当前用户所在地址 首先第一步:下载腾讯地图SD ...
- hMailServer之发送附件大小限制
hMailServer发送附件大小限制有以下几个地方: 1.php配置 参考 .post_max_size = 10M 表单提交最大数据为10M.此项不是限制上传单个文件的大小,而是针对整个表单的提交 ...