[CSP-S模拟测试]:u(差分)
题目背景
$\frac{1}{4}$遇到了一道水题,完全不会做,于是去请教小$D$。小$D$看了一眼就切掉了这题,嘲讽了$\frac{1}{4}$一番就离开了。于是,$\frac{1}{4}$只好来问你,这道题是这样的:
题目描述
考虑一个$n\times n$的矩阵$A$,初始所有元素均为$0$。
执行$q$次如下形式的操作给定$4$个整数$r,c,l,s$,对于每个满足$x\in [r,r+l),y\in [c,x−r+c]$的元素$(x,y)$,将权值增加$s$。也就是,给一个左上顶点为$(r,c)$、直角边长为$l$的下三角区域加上$s$。
输出最终矩阵的元素异或和。
输入格式
从文件$u.in$中读入数据。
第一行两个整数$n,q$。
接下来$q$行,每行四个整数$r,c,l,s$,代表一次操作。
输出格式
输出到文件$u.out$中。
输出一行,一个整数,代表答案。
样例
样例输入:
10 4
1 1 10 1
5 5 4 4
1 9 4 3
3 3 5 2
样例输出:
0
数据范围与提示
样例解释:
1 0 0 0 0 0 0 0 3 0
1 1 0 0 0 0 0 0 3 3
1 1 3 0 0 0 0 0 3 3
1 1 3 3 0 0 0 0 3 3
1 1 3 3 7 0 0 0 0 0
1 1 3 3 7 7 0 0 0 0
1 1 3 3 7 7 7 0 0 0
1 1 1 1 5 5 5 5 0 0
1 1 1 1 1 1 1 1 1 0
1 1 1 1 1 1 1 1 1 1
数据范围:
保证$n\in [1,{10}^3],q\in [0,3\times {10}^5],r,c,l\in [1,n],s\in [1,{10}^9]$。

题解
对于每次操作,相当于将下图中红色区域都加了$s$:

看数据范围显然只允许我们$\Theta(1)$修改。
那么我们就想到了差分。
如何差分呢?
我们维护两个差分数组,一个是对于列的差分(设为$s1$数组);另一个是对于斜着的差分(设为$s2$数组),如下图:

这样的话,就简单多了,对于每一个操作,我们只需要将$s1[r][c]+s$,$s1[r+l][c]-s$,$s2[r][c+1]-s$,$s2[r+l][c+l+1]+s$即可,如下图。

然后我们再令$s1[i][j]+=s1[i-1][j]$,$s2[i][j]+=s2[i-1][j-1]$即可变成这样,为方便,再定义$s3$数组表示整个矩阵从左到右的差分:

对其取前缀和就得到了最后的矩阵:

最后,记得开$long\ long$,否则只有$1$分不要怪我……
时间复杂度:$\Theta(n^2+q)$。
期望得分:$100$分。
实际得分:$100$分。
代码时刻
#include<bits/stdc++.h>
using namespace std;
int n,q;
long long s1[1010][1010],s2[1010][1010];
long long ans;
int main()
{
scanf("%d%d",&n,&q);
while(q--)
{
int r,c,l,s;
scanf("%d%d%d%d",&r,&c,&l,&s);
s1[r][c]+=s;
if(c+1<=n)s2[r][c+1]-=s;
if(r+l<=n)
{
s1[r+l][c]-=s;
if(c+l+1<=n)s2[r+l][c+l+1]+=s;
}
}
for(int i=1;i<=n;i++)
{
long long sum=0;
for(int j=1;j<=n;j++)
{
s1[i][j]+=s1[i-1][j];
s2[i][j]+=s2[i-1][j-1];
sum+=s1[i][j]+s2[i][j];
ans^=sum;
}
}
printf("%lld",ans);
return 0;
}
rp++
[CSP-S模拟测试]:u(差分)的更多相关文章
- noi2019模拟测试赛(四十七)
noi2019模拟测试赛(四十七) T1与运算(and) 题意: 给你一个序列\(a_i\),定义\(f_i=a_1\&a_2\&\cdots\&a_i\),求这个序列的所 ...
- [考试反思]0729NOIP模拟测试10
安度因:哇哦. 安度因:谢谢你. 第三个rank1不知为什么就来了.迷之二连?也不知道哪里来的rp 连续两次考试数学都占了比较大的比重,所以我非常幸运的得以发挥我的优势(也许是优势吧,反正数学里基本没 ...
- csp-s模拟测试94
csp-s模拟测试94 一场简单题,打爆了.$T1$脑抽分解质因数准备分子分母消,想了半天发现$jb$互质直接上天,果断码了高精滚蛋.$T2$无脑手玩大样例,突然灵光一闪想到映射到前$K$大小的区间, ...
- csp-s模拟测试90
csp-s模拟测试90 考场发明$Spfa$祭. $T1$按照题意模拟,然后我就发现我死了.一气之下删掉了$priority$,拍了几下发现贼jb快而且还是对的就开心地交了.$T2$的差分状态定义很棒 ...
- csp-s模拟测试85
csp-s模拟测试85 $T1$全场秒切没有什么区分度,$T2$全场成功转化题意但是我并不会打,$T3$暴力都没打很遗憾. 100 00:21:49 02:56:35 02:56:49 135 02: ...
- csp-s模拟测试87
csp-s模拟测试87 考场状态还可以$T1$我当时以为我秒切,$T2$确认自己思路不对后毅然决然码上,$T3$暴力挂了太可惜了. 03:01:28 03:16:07 03:11:38 140 03: ...
- Android单元测试与模拟测试详解
测试与基本规范 为什么需要测试? 为了稳定性,能够明确的了解是否正确的完成开发. 更加易于维护,能够在修改代码后保证功能不被破坏. 集成一些工具,规范开发规范,使得代码更加稳定( 如通过 phabri ...
- [开源]微信在线信息模拟测试工具(基于Senparc.Weixin.MP开发)
目前为止似乎还没有看到过Web版的普通消息测试工具(除了官方针对高级接口的),现有的一些桌面版的几个测试工具也都是使用XML直接请求,非常不友好,我们来尝试做一个“面向对象”操作的测试工具. 测试工具 ...
- 安装nginx python uwsgi环境 以及模拟测试
uwsgi帮助文档: http://uwsgi-docs-cn.readthedocs.io/zh_CN/latest/WSGIquickstart.html http://uwsgi-docs.re ...
- 利用Python中的mock库对Python代码进行模拟测试
这篇文章主要介绍了利用Python中的mock库对Python代码进行模拟测试,mock库自从Python3.3依赖成为了Python的内置库,本文也等于介绍了该库的用法,需要的朋友可以参考下 ...
随机推荐
- python web自动化测试框架搭建(功能&接口)——接口测试模块
Python接口测试采用python读取excel的方法,通过requests库发送请求和接收响应.模块有: Data:用于存放excel用例的,用例格式: iutil: 接口公共方法,数据引擎.ht ...
- IsAjaxRequest
具体来说,IsAjaxRequest代码可以分解为以下功能: public static bool IsAjaxRequest(this HttpRequestBase request) { if ( ...
- vue事件的绑定
<!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...
- 监控服务器的脚本log_agent
监控服务器脚本: 将恶意攻击IP地址加入黑名单 1.分割日志 使用os.system 执行操作系统命令,使用重定向来分割日志 2.获取访问ip 读日志文件,获取访问ip记录,使用字符串.split来获 ...
- [Linux] 024 IP 地址配置和网络 yum 源
1. IP 地址配置 (1) 使用 setup 工具 $ setup ps setup 是 RedHat 系列的功能:一般地,Debian系列没有这个功能 Xubuntu 没有这个功能 (2) 启动网 ...
- php 模拟登陆(不带验证码)采集数据
这里模拟表单登陆窗口 提交代码部分 1,生成session_id保存到 cookie $login_url = 'http://www.96net.com.cn/Login.php';$cookie_ ...
- SQL SERVER添加表注释、字段注释
--为字段添加注释 --Eg. execute sp_addextendedproperty 'MS_Description','字段备注信息','user','dbo','table','字段所属的 ...
- Windows程序设计(七)--鼠标
7.2 客户区鼠标消息 当鼠标移过窗口的显示区域时,窗口消息处理程序收到WM_MOUSEMOVE消息.当在窗口的显示区域中按下或者释放一个鼠标按键时,窗口消息处理程序会接收到下面这些消息: 键 按下 ...
- ajax axios 下载文件时如何获取进度条 process
最近项目需要做一个下载文件的进度条,看网上上传文件进度条下载,特分享出来方便大家查阅 <!DOCTYPE html> <html> <head> <m ...
- vue 踩坑之组件传值
Vue 报错[Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the pa ...