Description

  • W*H ≤ 2500000 , N,Q ≤ 200000

Solution

  • 不难发现一滴墨水的影响范围是一个正方形
  • 最中间的X是a,之后每往外一层就减b,知道a%b
  • 先将a%b的影响单独取出来。
  • 剩下若干层,从外到里分别是b,2b,3b,…,kb
  • 考虑每一层的矩形分别加b即可成为这个“回”字型的影响图。

b b b b b
b 2b 2b 2b b
b 2b 3b 2b b
b 2b 2b 2b b
b b b b b

  • 将每一层分别加b,根据二维前缀和的方法即可快速加一个矩形
    (+b)-------- (-b)
    |***************|
    (-b)---------(+b)

  • 多层加在一起会变成
    b 0 0 0 0 0 0 -b
    0 b 0 0 0 0 -b 0
    0 0 b 0 0 -b 0 0
    0 0 0 b -b 0 0 0
    0 0 0 -b b 0 0 0
    0 0 -b 0 0 b 0 0
    0 -b 0 0 0 0 b 0
    -b 0 0 0 0 0 0 b

  • 将左上到右下和右上到左下的对角线分别计算。一段对角线的+b或-b依旧用差分区间修改。

  • 这样通过对角线的差分还原出上图,再通过二维前缀和即可还原出每一个位置。然后再用前缀和就可以实现O(1)查询。

  • 现在我们考虑一下出界的情况(即对角线有一部分在边界外时),这也是这题最为坑且难打的地方。
    -

  • 例如红色的对角线上要全部+b

  • 但是出界的那一些显然不能找到地方填。

  • 所以我们考虑这些+b都是对右下的造成影响,所以出界的那一段就等价于橙色的那一段。

  • 所以将出界的部分影射到边界上后区间修改即可(又有一个差分)

  • 其它四个角以及出的不同的界要讨论一波,以此类推。

  • 最后复杂度O(w*h)

  • PS:注意一下精度(鬼知道为什么出题人还要求平均数,难道是专门卡精度的? )

#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#define maxm 2500005
#define maxn 200005
#define ll long long
using namespace std;int w,h,q,n,i,j,k,x,y,a,b,d,xx,yy,t;
ll sum[maxm],level[maxm],pos[maxm],neg[maxm],row[maxm],col[maxm],cnt,ret;int I(int x,int y){if (x<1||y<1||x>w||y>h) return 0; else return (x-1)*h+y;
}void add(int x,int y,int d){if (x<=w&&y<=h) level[I(max(x,1),max(y,1))]+=d;
}int main(){freopen("rezero07.in","r",stdin);freopen("ceshi.out","w",stdout);
//  freopen("ceshi.in","r",stdin);scanf("%d%d",&w,&h);scanf("%d",&n);for(i=1;i<=n;i++) {scanf("%d%d%d%d",&x,&y,&a,&b);d=a/b-1;add(x-d-1,y-d-1,a%b),add(x+d+2,y+d+2,a%b);add(x-d-1,y+d+2,-a%b),add(x+d+2,y-d-1,-a%b);//左上xx=x-d,yy=y-d;if (xx<1&&yy<1) {t=min(1-xx,1-yy);level[I(1,1)]+=t*b,xx+=t,yy+=t;}if (xx<1) {t=1-xx;row[I(1,yy)]+=b,row[I(1,yy+t)]-=b;xx+=t,yy+=t;}if (yy<1) {t=1-yy;col[I(xx,1)]+=b,col[I(xx+t,1)]-=b;xx+=t,yy+=t;}pos[I(xx,yy)]+=b;
//      continue;//右下xx=x+d+2,yy=y+d+2;if (xx<=w&&yy<=h) pos[I(xx,yy)]-=b;
//      continue;//左下xx=x+d+1,yy=y-d;if (xx>w&&y<1) {t=min(xx-w,1-yy);xx-=t,yy+=t;}if (xx>w) {t=xx-w;xx-=t,yy+=t;}if (yy<1) {t=1-yy;col[I(xx-t+1,1)]-=b;if (xx+1<=w) col[I(xx+1,1)]+=b;xx-=t,yy+=t;}neg[I(xx,yy)]-=b;//右上xx=x-d-1,yy=y+d+2;if (xx>=1&&yy<=h) neg[I(xx,yy)]+=b;else xx++,yy--;if (xx<1&&yy>h) {t=min(1-xx,yy-h);xx+=t,yy-=t;} if (xx<1) {t=1-xx;row[I(1,yy-t+1)]-=b;if (yy+1<=h) row[I(1,yy+1)]+=b;xx+=t,yy-=t;}if (yy>h) {t=yy-h;xx+=t,yy-=t;}}for(i=1;i<=w;i++) for(cnt=0,j=1;j<=h;j++) cnt+=row[I(i,j)],level[I(i,j)]+=cnt;for(j=1;j<=h;j++) for(cnt=0,i=1;i<=w;i++) cnt+=col[I(i,j)],level[I(i,j)]+=cnt;for(x=1,y=1;y<=h;y++) for(cnt=0,i=x,j=y;i<=w&&j<=h;i++,j++)cnt+=pos[I(i,j)],level[I(i,j)]+=cnt;for(x=2,y=1;x<=w;x++) for(cnt=0,i=x,j=y;i<=w&&j<=h;i++,j++)cnt+=pos[I(i,j)],level[I(i,j)]+=cnt;for(x=1,y=1;x<=w;x++) for(cnt=0,i=x,j=y;i>=1&&j<=h;i--,j++) cnt+=neg[I(i,j)],level[I(i,j)]+=cnt;for(x=w,y=2;y<=h;y++) for(cnt=0,i=x,j=y;i>=1&&j<=h;i--,j++)cnt+=neg[I(i,j)],level[I(i,j)]+=cnt;for(i=1;i<=w;i++) for(j=1;j<=h;j++) level[I(i,j)]+=level[I(i-1,j)]+level[I(i,j-1)]-level[I(i-1,j-1)];for(i=1;i<=w;i++) for(j=1;j<=h;j++) sum[I(i,j)]=level[I(i,j)]+sum[I(i-1,j)]+sum[I(i,j-1)]-sum[I(i-1,j-1)];scanf("%d",&q);while (q--) {scanf("%d%d%d%d",&x,&y,&i,&j);ll ans=sum[I(i,j)]-sum[I(x-1,j)]-sum[I(i,y-1)]+sum[I(x-1,y-1)];ll s=(i-x+1)*(j-y+1);ll ret=ans/s;if ((ans%s)*2>=s) ret++;printf("%lld\n",ret);}
}

JZOJ4808. 【NOIP2016提高A组五校联考3】书稿相关推荐

  1. 【JZOJ4817】【NOIP2016提高A组五校联考4】square

    题目描述 输入 输出 样例输入 3 4 1 1 0 1 0 1 1 0 0 1 1 0 5 1 1 2 3 2 1 3 2 3 2 3 4 1 1 3 4 1 2 3 4 样例输出 1 1 1 2 2 ...

  2. 【NOIP2016提高A组五校联考2】running

    题目 小胡同学是个热爱运动的好孩子. 每天晚上,小胡都会去操场上跑步,学校的操场可以看成一个由n个格子排成的一个环形,格子按照顺时针顺序从0 到n- 1 标号. 小胡观察到有m 个同学在跑步,最开始每 ...

  3. 【JZOJ4811】【NOIP2016提高A组五校联考1】排队

    题目描述 输入 输出 样例输入 5 4 1 2 1 3 3 4 3 5 1 4 2 4 1 2 2 5 样例输出 3 1 1 2 数据范围 样例解释 解法 可推知原树可以转换为一个序列,即优先序列: ...

  4. jzoj4230. 【五校联考4day1】淬炼神体(B组——Day3)

    jzoj4230. [五校联考4day1]淬炼神体 题目 Description 王仙女将你提供的答案填在<葵花宝典>上,突然,宝典发出耀眼的白光,一股强大的吸力瞬间将仙女吸入宝典中. 一 ...

  5. 湖南长郡2021高考成绩查询时间,2021年湖南新高考六校、长郡十五校联考时间公布...

    2021年湖南新高考六校.长郡十五校联考时间公布 导读:距离2021年高考时间仅剩不到一百天,各个省份都的高三学子都进入紧张阶段.开始了各种模拟考试.2021届湖南省炎德英才大联考的考试时间也已经公布 ...

  6. 4246. 【五校联考6day2】san (Standard IO)

    4246. [五校联考6day2]san (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Detailed Limits D ...

  7. JZOJ Day4 B组 T3【五校联考1day1】我才不是萝莉控呢

    题目大意: 小YYY:"小RRR 你是萝莉控吗."小RRR:"-" 为了避免这个尴尬的话题,小RRR 决定给小YYY 做一道题. 有一个长度为nnn 的正整数数 ...

  8. 【五校联考1day1】我才不是萝莉控呢

    Description 小Y:"小R 你是萝莉控吗."小R:"-" 为了避免这个尴尬的话题,小R 决定给小Y 做一道题. 有一个长度为n 的正整数数组A,满足A ...

  9. [jzoj4210] 【五校联考1day1】我才不是萝莉控呢 {哈夫曼树}

    题目 Description 小Y:"小R 你是萝莉控吗."小R:"-" 为了避免这个尴尬的话题,小R 决定给小Y 做一道题. 有一个长度为n 的正整数数组A, ...

最新文章

  1. linux怎么确认oracle已启动,怎么设置在Linux启动后,Oracle也启动,监听也启动
  2. 辅助驾驶等级_自动驾驶分为几级?我们离真正的自动驾驶还有多远?
  3. java开发变化_十年编程语言变化,大众程序员的路在哪里?
  4. ppt页面样式html,PPT排版:一页PPT做出8种样式
  5. aspxgridview 增加行号
  6. 过直线上一点画垂线图_苏教版四年级数学上册8.5认识垂直、点到直线的距离微课视频 | 练习...
  7. 领导者的资质——学习笔记(3):领导者的十项职责
  8. P5718 【深基4.例2】找最小值
  9. php ob缓存原理介绍
  10. (6)Linux进程调度-实时调度器
  11. 操作系统形成性考核册作业答案
  12. 深度学习基础 | 从Language Model到RNN
  13. Star Schema完全参考手册读书笔记四
  14. java怎么实现日程提醒_如何用java和xml实现日程提醒
  15. 东大OJ-1430-PrimeNumbers
  16. vue 多个api请求_Vue+Django REST framework实战3.RESTful API和VUE目录结构
  17. win10桌面排序计算机,Windows10正式版下设置桌面自动排列图标的详细步骤
  18. python爬虫之十_scrapy框架进阶
  19. MobaXterm_Portable的快速复制粘贴
  20. 《Linux基础》06. 进程管理 · 服务管理

热门文章

  1. 基于android的检测心率,基于android手机的血氧饱和度检测
  2. 微信小程序实现考场座位号随机
  3. qt字符编码及数据格式转换
  4. C语言输出格式控制符大全
  5. DNS_PROBE_POSSIBLE打不开网页怎么办?
  6. 线性代数学习笔记8-4:正定矩阵、二次型的几何意义、配方法与消元法的联系、最小二乘法与半正定矩阵A^T A
  7. JS获取各种屏幕的宽度和高度
  8. 提交按钮css加样式,用CSS美化按钮(button)
  9. android一键换机功能实现,不同品牌手机一键换机教程
  10. Conmi的正确答案——linux/ubuntu安装web运维工具(Cockpit)