[cf div 2 706E] Working routine
[cf div 2 706E] Working routine
Vasiliy finally got to work, where there is a huge amount of tasks waiting for him. Vasiliy is given a matrix consisting of n rows and m columns and q tasks. Each task is to swap two submatrices of the given matrix.
For each task Vasiliy knows six integers ai, bi, ci, di, hi, wi, where ai is the index of the row where the top-left corner of the first rectangle is located, bi is the index of its column, ci is the index of the row of the top-left corner of the second rectangle, di is the index of its column, hi is the height of the rectangle and wi is its width.
It's guaranteed that two rectangles in one query do not overlap and do not touch, that is, no cell belongs to both rectangles, and no two cells belonging to different rectangles share a side. However, rectangles are allowed to share an angle.
Vasiliy wants to know how the matrix will look like after all tasks are performed.
Input
The first line of the input contains three integers n, m and q (2 ≤ n, m ≤ 1000, 1 ≤ q ≤ 10 000) — the number of rows and columns in matrix, and the number of tasks Vasiliy has to perform.
Then follow n lines containing m integers vi, j (1 ≤ vi, j ≤ 109) each — initial values of the cells of the matrix.
Each of the following q lines contains six integers ai, bi, ci, di, hi, wi (1 ≤ ai, ci, hi ≤ n, 1 ≤ bi, di, wi ≤ m).
Output
Print n lines containing m integers each — the resulting matrix.
Example
4 4 21 1 2 21 1 2 23 3 4 43 3 4 41 1 3 3 2 23 1 1 3 2 2
4 4 3 34 4 3 32 2 1 12 2 1 1
4 2 11 11 12 22 21 1 4 1 1 2
2 21 12 21 1
这道题目续了我一晚上。
原本就想用链表,然后写炸了。
然后换了双向链表和树状数组,发现都wa on 4。
然后就发现了这样的做法有共同的漏洞,就是我的做法当一个位置上的权值改变再改变,我就没办法了。
怎么说呢?就是不支持动态维护(不然要O(n*m))。
然后就换用了十字链表。
我们只要维护矩阵中每一个点的右边和下边就可以了。然后0,n+1这种边界也要连边。
这样,维护一个矩形直接就把边界的信息修改一发。复杂度是O(q*(n+m))。
code:
#include<bits/stdc++.h>
using namespace std;
;
];}a[N*N];
int n,m,q;
inline int read() {
; char ch=getchar();
') ch=getchar();
+ch-',ch=getchar();
return x;
}
)+y;}
void reach(int &p,int x,int y) {
; i<x; i++) p=a[p].dir[];
; i<y; i++) p=a[p].dir[];
}
void alter(int p1,int p2,int l1,int l2,int d) {
; i<l1; i++) {
p1=a[p1].dir[d],p2=a[p2].dir[d];
swap(a[p1].dir[-d],a[p2].dir[-d]);
}
d=-d;
; i<l2; i++) {
p1=a[p1].dir[d],p2=a[p2].dir[d];
swap(a[p1].dir[-d],a[p2].dir[-d]);
}
}
int main() {
cin>>n>>m>>q;
; i<=n; i++)
; j<=m; j++) a[id(i,j)].v=read();
; i<=n; i++)
; j<=m; j++) {
a[id(i,j)].dir[]=id(i,j+);
a[id(i,j)].dir[]=id(i+,j);
}
for (int sx,sy,sp,tx,ty,tp,lx,ly; q; q--) {
sx=read(),sy=read(),sp=;
tx=read(),ty=read(),tp=;
lx=read(),ly=read();
reach(sp,sx,sy);
reach(tp,tx,ty);
alter(sp,tp,lx,ly,);
alter(sp,tp,ly,lx,);
}
,p=,p0; i<=n; i++,puts("")) {
p=a[p].dir[],p0=p;
; j<=m; j++) {
p0=a[p0].dir[];
printf("%d ",a[p0].v);
}
}
;
}
[cf div 2 706E] Working routine的更多相关文章
- 【链表】【模拟】Codeforces 706E Working routine
题目链接: http://codeforces.com/problemset/problem/706/E 题目大意: 给一个N*M的矩阵,Q个操作,每次把两个同样大小的子矩阵交换,子矩阵左上角坐标分别 ...
- CodeForces 706E Working routine
十字链表. 开一个十字链表,矩阵中每一格作为一个节点,记录五个量: $s[i].L$:$i$节点左边的节点编号 $s[i].R$:$i$节点右边的节点编号 $s[i].U$:$i$节点上面的节点编号 ...
- Codeforces Round #377 (Div. 2)
#include <iostream> #include <stdio.h> #include <string.h> using namespace std; in ...
- CF 989
今天晚上闲来无事打了一场CF......div.2,第600名.太弱了. T1看懂题之后发现是水题(废话),6min AC. T2仔细思考之后发现可做,但是由于n=p的特判没确定到底有没有解,WA了一 ...
- Codeforces Round #466 (Div. 2) Solution
从这里开始 题目列表 小结 Problem A Points on the line Problem B Our Tanya is Crying Out Loud Problem C Phone Nu ...
- chrome中不可见字符引发的float问题
起因是刷知乎时碰到这么个问题:https://www.zhihu.com/question/41400503 问题代码如下: <!DOCTYPE html> <html lang=& ...
- 基于asp.net的ajax分页
直接贴代码: <html> <head> <meta http-equiv="Content-Type" content="text/htm ...
- Codeforces round 1111
CF Div 2 537 比赛链接 感觉题目难度OK,五个题都能做,后俩题考察人的翻译水平... 另外,$Claris$太强了... A 直接按照题意模拟,不知道为啥有人会被× 代码: #includ ...
- 一款基于jquery的鼠标经过图片列表特效
今天要给大家推荐一款基于jquery的鼠标经过图片列表特效.当鼠标经过列表图片的时候,图片放大,且有一个半透明的遮罩层随之移动.效果图如下: 在线预览 源码下载 实现的代码 html代码: < ...
随机推荐
- MySql 创建索引原则
https://blog.csdn.net/csdnones/article/details/50412603 为了使索引的使用效率更高,在创建索引时,必须考虑在哪些字段上创建索引和创建什么类型的索引 ...
- python基础(十三) cmd命令调用
python cmd命令调用 关于python调用cmd命令: 主要介绍两种方式: 1.python的OS模块. OS模块调用CMD命令有两种方式:os.popen(),os.system(). 都是 ...
- UVA 11582 Colossal Fibonacci Numbers(数学)
Colossal Fibonacci Numbers 想先说下最近的状态吧,已经考完试了,这个暑假也应该是最后刷题的暑假了,打完今年acm就应该会退了,但是还什么都不会呢? +_+ 所以这个暑假,一定 ...
- Lambda表达式详解(例子详解)(转自:http://blog.csdn.net/damon316/article/details/51734661)
Lambda表达式详解(例子详解) lambda简介 lambda运算符:所有的lambda表达式都是用新的lambda运算符 " => ",可以叫他,“转到”或者 ...
- 灵雀云容器PaaS平台助力知名股份制银行金融科技革新
互联网.科技和金融的碰撞给银行业带来巨大影响.IT技术起初是传统金融提升效率的工具和方法,随着新技术的演进,技术成为驱动变革的核心要素.Fintech金融科技以技术和数据为驱动,用创新的方法改变了金融 ...
- Java-番外篇-Java通过代码发给手机发信息
一.代码 import java.io.IOException; import org.apache.commons.httpclient.Header; import org.apache.comm ...
- linux以16进制查看文件
vim 先用vim -b data 以2进制打开文件,然后用xxd工具转化,在vim的命令行模式下: :%!xxd --将当前文本转化为16进制格式 :%!xxd -r --将16 ...
- Python之猴子补丁
1.在运行时,对属性,方法,函数等进行动态替换 2.其目的往往是为了通过替换,修改来增强,扩展原有代码的能力 #test2.py class Person: def get_score(self): ...
- 关闭jtag保留swd
串行线JTAG 配置 (Serial wire JTAG configuration) 位26:24 这些位只能由软件写( 读这些位,将返回未定义的数值) ,用于配置SWJ和跟踪复用功能的I/O ...
- Linux 文件时间记录属性 调优
Linux 文件时间属性介绍 atime:(access time)显示的是文件中的数据最后被访问的时间,比如系统的进程直接使用或通过一些命令和脚本间接使用.(执行一些可执行文件或脚本) mtime: ...