题目背景

蕾米莉亚的红雾异变失败后,很不甘心。

题目描述

经过上次失败后,蕾米莉亚决定再次发动红雾异变,但为了防止被灵梦退治,她决定将红雾以奇怪的阵势释放。

我们将幻想乡看做是一个n*m的方格地区,一开始没有任何一个地区被红雾遮盖。蕾米莉亚每次站在某一个地区上,向东南西北四个方向各发出一条无限长的红雾,可以影响到整行/整列,但不会影响到她所站的那个地区。如果两阵红雾碰撞,则会因为密度过大而沉降消失。灵梦察觉到了这次异变,决定去解决它。但在解决之前,灵梦想要了解一片范围红雾的密度。可以简述为两种操作:

1 x y 蕾米莉亚站在坐标(x,y)的位置向四个方向释放无限长的红雾。

2 x1 y1 x2 y2 询问左上点为(x1,y1),右下点为(x2,y2)的矩形范围内,被红雾遮盖的地区的数量。

输入输出格式

输入格式:

第一行三个整数n,m,q,表示幻想乡大小为n*m,有q个询问。

接下来q行,每行3个或5个整数,用空格隔开,含义见题目描述。

输出格式:

对于每一个操作2,输出一行一个整数,表示对应询问的答案。

输入输出样例

输入样例#1:

  1. 4 4 3
  2. 1 2 2
  3. 1 4 4
  4. 2 1 1 4 4
输出样例#1:

  1. 8

说明

样例解释:

用o表示没有红雾,x表示有红雾,两次释放红雾后幻想乡地图如下:

oxox

xoxo

oxox

xoxo

数据范围:

对于20%的数据,1<=n,m,q<=200

对于 40%的数据,1<=n,m,q<=1000

对于100%的数据,1<=n,m,q<=100000

1<=x1,x2,x<=n x1<=x2

1<=y1,y2,y<=m y1<=y2

by-orangebird


orangebird每次比赛都出线段树吗。     QAQ

加了小小容斥的线段树题

其实用树状数组更快吧

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<iostream>
  4. using namespace std;
  5.  
  6. typedef long long ll;
  7.  
  8. inline int read(){
  9. char ch;
  10. int re=;
  11. bool flag=;
  12. while((ch=getchar())!='-'&&(ch<''||ch>''));
  13. ch=='-'?flag=:re=ch-'';
  14. while((ch=getchar())>=''&&ch<='') re=re*+ch-'';
  15. return flag?-re:re;
  16. }
  17.  
  18. struct segment{
  19. int l,r,num;
  20. };
  21.  
  22. const int maxn=;
  23.  
  24. segment tre[][maxn<<];
  25. int n,m,q;
  26.  
  27. void push_up(int x,int c){
  28. tre[c][x].num=tre[c][x<<].num+tre[c][x<<|].num;
  29. }
  30.  
  31. void build(int x,int l,int r,int c){
  32. tre[c][x].l=l; tre[c][x].r=r;
  33. if(l==r) return;
  34. int mid=(l+r)>>;
  35. build(x<<,l,mid,c); build(x<<|,mid+,r,c);
  36. }
  37.  
  38. void update(int x,int pos,int c){
  39. if(tre[c][x].l==tre[c][x].r){
  40. tre[c][x].num^=;
  41. return;
  42. }
  43.  
  44. int mid=(tre[c][x].l+tre[c][x].r)>>;
  45. if(mid>=pos) update(x<<,pos,c);
  46. else update(x<<|,pos,c);
  47. push_up(x,c);
  48. }
  49.  
  50. int query(int x,int L,int R,int c){
  51. if(L<=tre[c][x].l&&tre[c][x].r<=R) return tre[c][x].num;
  52.  
  53. int mid=(tre[c][x].l+tre[c][x].r)>>;
  54. if(R<=mid) return query(x<<,L,R,c);
  55. if(L>mid) return query(x<<|,L,R,c);
  56. return query(x<<,L,mid,c)+query(x<<|,mid+,R,c);
  57. }
  58.  
  59. int main(){
  60. //freopen("temp.in","r",stdin);
  61. n=read(); m=read(); q=read();
  62. build(,,n,); build(,,m,);
  63. int opt,x1,x2,y1,y2;
  64. ll ans1,ans2;
  65. for(int i=;i<q;i++){
  66. opt=read();
  67. switch(opt){
  68. case :{
  69. x1=read(); y1=read();
  70. update(,x1,); update(,y1,);
  71. break;
  72. }
  73. case :{
  74. x1=read(); y1=read(); x2=read(); y2=read();
  75. ans1=query(,x1,x2,); ans2=query(,y1,y2,);
  76. printf("%lld\n",ans1*(ll)(y2-y1+)+ans2*(ll)(x2-x1+)-2LL*ans1*ans2);
  77. break;
  78. }
  79. }
  80. }
  81. }

我忘了置身濒绝孤岛
忘了眼泪不过是笑料
忘了百年无声口号
没能忘记你

[luogu P3801] 红色的幻想乡 [线段树][树状数组]的更多相关文章

  1. luogu P3801 红色的幻想乡

    嘟嘟嘟 首先人人都能想到是线段树,不过二维线段树肯定会MLE+TLE的. 我们换一种想法,不去修改整个区间,而是修改一个点:开横竖两个线段树,分别记录哪些行和列被修改了.因为如果两阵红雾碰撞,则会因为 ...

  2. 洛谷——P3801 红色的幻想乡

    P3801 红色的幻想乡 推荐阅读 https://blog.csdn.net/qq_41252892/article/details/79035942 非常清楚 线段树单点修改 emmm没什么了 # ...

  3. 洛谷 P3801 红色的幻想乡

    题目背景 蕾米莉亚的红雾异变失败后,很不甘心. 题目描述 经过上次失败后,蕾米莉亚决定再次发动红雾异变,但为了防止被灵梦退治,她决定将红雾以奇怪的阵势释放. 我们将幻想乡看做是一个n*m的方格地区,一 ...

  4. AC日记——红色的幻想乡 洛谷 P3801

    红色的幻想乡 思路: 线段树+容斥原理: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 100005 #de ...

  5. 【BZOJ4596】黑暗前的幻想乡(矩阵树定理,容斥)

    [BZOJ4596]黑暗前的幻想乡(矩阵树定理,容斥) 题面 BZOJ 有\(n\)个点,要求连出一棵生成树, 指定了一些边可以染成某种颜色,一共\(n-1\)种颜色, 求所有颜色都出现过的生成树方案 ...

  6. [luogu3801]红色的幻想乡

    题目描述 经过上次失败后,蕾米莉亚决定再次发动红雾异变,但为了防止被灵梦退治,她决定将红雾以奇怪的阵势释放. 我们将幻想乡看做是一个n*m的方格地区,一开始没有任何一个地区被红雾遮盖.蕾米莉亚每次站在 ...

  7. 【bzoj4596】[Shoi2016]黑暗前的幻想乡 (矩阵树定理+容斥)

    Description 四年一度的幻想乡大选开始了,最近幻想乡最大的问题是很多来历不明的妖怪涌入了幻想乡,扰乱了幻想乡昔日的秩序.但是幻想乡的建制派妖怪(人类)博丽灵梦和八云紫等人整日高谈所有妖怪平等 ...

  8. BZOJ3925: [Zjoi2015]地震后的幻想乡【概率期望+状压DP】

    Description 傲娇少女幽香是一个很萌很萌的妹子,而且她非常非常地有爱心,很喜欢为幻想乡的人们做一些自己力所能及的事情来帮助他们. 这不,幻想乡突然发生了地震,所有的道路都崩塌了.现在的首要任 ...

  9. 洛谷p3801:红色的幻想乡

    初见完全没有思路.....感觉像是线段树 但二维感觉完全不可做嘛 于是只能去看了看题解 然而还是疯狂爆零+WA.. 和yycc神犇调了两三个小时才调出来... ——————以下个人理解 考虑到每次的修 ...

随机推荐

  1. java学习——平台的安装与部署

    Java 平台安装与部署 jre,jdk安装与部署 1)jre,jdk安装过程(略) 2)部署过程 新建(JAVA_HOME) 变量名:JAVA_HOME 变量值:E:\Program Files ( ...

  2. IntelliJ IDEA 2017.1.4 x64配置说明

    只是为了研究下idea这款编译器怎么使用.开门见山,说下如何配置这款编译器,不配置也能用,但是强迫症表示不服.下面直入正题: 下载与安装就不说了,除了更改安装目录外,没啥注意的地方,建议下载idea去 ...

  3. PyQt5环境搭建及cx_freeze打包exe

    Python的图形库也有好几个,Qt文档和使用面还是要广一些. 打包成可执行文件的也有好几个,PyInstaller用的比较多,但是PyInstaller目前还不支持Python3.6(开发版支持3. ...

  4. angular嵌入注入服务实例

    <!DOCTYPE html> <html lang="en" ng-app="myapp"> <head> <met ...

  5. 用css控制字数,多余的用省略号代替

    选择器 { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; width: 100px; } white-space 属性 ...

  6. openvpn配置注意事项

    1.安装VPN安装结束后,需要配置CONFIG文件夹服务端及客户端的配置文件,建议从sample文件里直接拷贝修改,网上的一些案例会引起无法启动的问题,没仔细研究过是哪里错了,反正最后从sample里 ...

  7. 使用zabbix_agent监控第一台windows服务器

    解压windows客户端压缩包 bin目录下会有win32和win64俩个文件夹,根据windows系统的版本自行进行选择,将客户端程序文件拷贝至C:\zabbix 将conf文件中的zabbix_a ...

  8. ASP.NET初始化流程分析2

    上一篇讲了从创建应用程序域到创建ISAPIRuntime实例的过程,本篇继续讲Asp.net处理第一次请求的必要的初始化过程. ISAPIRuntime分析 ISAPIRuntime在System.W ...

  9. ajax异步加载遮罩层特效

    <!doctype html> <html> <head> <title>遮罩层(正在加载中)</title> <meta chars ...

  10. 【LeetCode】171. Excel Sheet Column Number

    题目: Related to question Excel Sheet Column Title Given a column title as appear in an Excel sheet, r ...