[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 aibicidihiwi, 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 nm 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 aibicidihiwi (1 ≤ ai, ci, hi ≤ n, 1 ≤ bi, di, wi ≤ m).

Output

Print n lines containing m integers each — the resulting matrix.

Example

Input
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
Output
4 4 3 34 4 3 32 2 1 12 2 1 1
Input
4 2 11 11 12 22 21 1 4 1 1 2
Output
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的更多相关文章

  1. 【链表】【模拟】Codeforces 706E Working routine

    题目链接: http://codeforces.com/problemset/problem/706/E 题目大意: 给一个N*M的矩阵,Q个操作,每次把两个同样大小的子矩阵交换,子矩阵左上角坐标分别 ...

  2. CodeForces 706E Working routine

    十字链表. 开一个十字链表,矩阵中每一格作为一个节点,记录五个量: $s[i].L$:$i$节点左边的节点编号 $s[i].R$:$i$节点右边的节点编号 $s[i].U$:$i$节点上面的节点编号 ...

  3. Codeforces Round #377 (Div. 2)

    #include <iostream> #include <stdio.h> #include <string.h> using namespace std; in ...

  4. CF 989

    今天晚上闲来无事打了一场CF......div.2,第600名.太弱了. T1看懂题之后发现是水题(废话),6min AC. T2仔细思考之后发现可做,但是由于n=p的特判没确定到底有没有解,WA了一 ...

  5. Codeforces Round #466 (Div. 2) Solution

    从这里开始 题目列表 小结 Problem A Points on the line Problem B Our Tanya is Crying Out Loud Problem C Phone Nu ...

  6. chrome中不可见字符引发的float问题

    起因是刷知乎时碰到这么个问题:https://www.zhihu.com/question/41400503 问题代码如下: <!DOCTYPE html> <html lang=& ...

  7. 基于asp.net的ajax分页

    直接贴代码: <html> <head> <meta http-equiv="Content-Type" content="text/htm ...

  8. Codeforces round 1111

    CF Div 2 537 比赛链接 感觉题目难度OK,五个题都能做,后俩题考察人的翻译水平... 另外,$Claris$太强了... A 直接按照题意模拟,不知道为啥有人会被× 代码: #includ ...

  9. 一款基于jquery的鼠标经过图片列表特效

    今天要给大家推荐一款基于jquery的鼠标经过图片列表特效.当鼠标经过列表图片的时候,图片放大,且有一个半透明的遮罩层随之移动.效果图如下: 在线预览   源码下载 实现的代码 html代码: < ...

随机推荐

  1. spring拦截器-过滤器的区别

    1.  理解 拦截器 :是在面向切面编程的时候,在你的 service 或者一个方法前调用一个方法,或者在方法后调用一个方法:比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业 ...

  2. Android ListVeiw控件(转载整理)

    列表的显示需要三个元素: 1.ListVeiw 用来展示列表的View. 2.适配器 用来把数据映射到ListView上的中介. 3.数据    具体的将被映射的字符串,图片,或者基本组件. 根据列表 ...

  3. 关于maven-resources-plugin配置的隐藏的坑

    昨天发现一个问题, 一个第三方证书的文件存放于resources文件夹下,在本地环境使用该证书进行加密调用第三方接口,没有任何问题,但是发布到测试环境和生产环境(linux)报错,提示证书工厂无法初始 ...

  4. 高并发架构系列:MQ消息队列的12点核心原理总结

    消息队列已经逐渐成为分布式应用场景.内部通信.以及秒杀等高并发业务场景的核心手段,它具有低耦合.可靠投递.广播.流量控制.最终一致性 等一系列功能. 无论是 RabbitMQ.RocketMQ.Act ...

  5. JavaScriptDom和应用

    DOM编程 DOM是Document Object Model文档对象模型 DOM是一种与浏览器,平台,语言无关的接口,使得你可以访问页面其他的标准组件 DOM简介 D:文档  –  html 文档 ...

  6. js对象添加动态属性

    在业务中,经常会遇到使用同个方法调用多个同类型接口,以下简单模拟两个API接口 // api-1 { code: 0, status: 200, title: 'web前端框架', list: [ { ...

  7. 虚拟机VM三种网络连接方式说明

  8. Vue系列之 => Watch监视路由地址改变

    第一种方式实现监听 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...

  9. SpringMvc CharacterEncodingFilter 解析 encoding 参数并初始化参数

    SpringMvc CharacterEncodingFilter 解析 encoding 参数并初始化参数:

  10. java ==与equals()方法的总结

    1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolean   他们之间的比较,应用双等号(==),比较的是他们的值. 2.复合数据 ...