[USACO09HOL]假期绘画Holiday Painting
观察到列数只有15,可以想到对于每一列维护一颗线段树
sum表示该区间与目标矩阵中该区间相同元素个数
lazy表示该区间应被修改成什么颜色
g即目标矩阵中该区间白色格子的个数
显然一个区间的sum=区间长度-g(修改为0时) 或 g(修改为1时)
#define RG register
#include<cstdio>
using namespace std;
const int N=;
int n,m,q,X,Ans;
int a[N][];
inline int read()
{
RG int x=,w=;RG char ch=getchar();
while(ch<''||ch>''){if(ch=='-')w=-;ch=getchar();}
while(ch>=''&&ch<='')x=x*+ch-'',ch=getchar();
return x*w;
}
struct segment{
int sum[N<<],lazy[N<<],g[N<<];
inline void Pushup(int rt){sum[rt]=sum[rt<<]+sum[rt<<|];}
void Build(int rt,int l,int r,int k){
if(l==r)
{
sum[rt]=a[l][k]^;
g[rt]=a[l][k];
return;
}
int mid=(l+r)>>;
Build(rt<<,l,mid,k);
Build(rt<<|,mid+,r,k);
Pushup(rt);
g[rt]=g[rt<<]+g[rt<<|];
}
inline void Pushdown(int rt,int s){//s即区间长度
int t=lazy[rt];
if(t==-)return;
if(!t)
{
sum[rt<<]=(s-(s>>))-g[rt<<];
sum[rt<<|]=(s>>)-g[rt<<|];
}
else
{
sum[rt<<]=g[rt<<];
sum[rt<<|]=g[rt<<|];
}
lazy[rt<<]=lazy[rt<<|]=t;
lazy[rt]=-;
}
void Modify(int rt,int l,int r,int ll,int rr){
if(ll<=l&&r<=rr)
{
if(X)sum[rt]=g[rt];
else sum[rt]=r-l+-g[rt];
lazy[rt]=X;
return;
}
Pushdown(rt,r-l+);
int mid=(l+r)>>;
if(ll<=mid)Modify(rt<<,l,mid,ll,rr);
if(rr>mid)Modify(rt<<|,mid+,r,ll,rr);
Pushup(rt);
}
}T[];
int main()
{
n=read();
m=read();
q=read();
RG char c;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
c=getchar();
while(c!=''&&c!='')c=getchar();
a[i][j]=c-'';
}
for(int i=;i<=m;i++)T[i].Build(,,n,i);
RG int x1,x2,y1,y2;
while(q--)
{
x1=read();
x2=read();
y1=read();
y2=read();
X=read();
for(int i=y1;i<=y2;i++)T[i].Modify(,,n,x1,x2);
Ans=;
for(int i=;i<=m;i++)Ans+=T[i].sum[];
printf("%d\n",Ans);
}
return ;
}
[USACO09HOL]假期绘画Holiday Painting的更多相关文章
- P2930 [USACO09HOL]假期绘画Holiday Painting
线段树水题,考虑到只有15列,所以我们对于每一列,我们都去维护一个线段树. 现在来考虑一下修改操作,因为每次修改的时候,我们都是将黑的改成白的,白的改成黑的,所以我们对线段树的每个节点维护当前这段区间 ...
- [bzoj1582][Usaco2009 Hol]Holiday Painting 节日画画_线段树
Holiday Painting 节日画画 bzoj-1582 Usaco-2009 Hol 题目大意:给定两个n*m的01网格图.q次操作,每次将第二个网格图的子矩阵全部变成0或1,问每一次操作后两 ...
- [BZOJ1582] [Usaco2009 Hol]Holiday Painting 节日画画(线段树)
传送门 线段树区间修改傻题 #include <cstdio> #include <cstring> #include <iostream> #define N 5 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 关于图片的PNG与JPG、JIF格式
一:GIF(Graphics Interchange Format) 简介 GIF图形交换格式是一种位图图形文件格式,以8位色(即256种颜色)重现真彩色的图像. 它实际上是一种压缩文档,采用LZW压 ...
- 前端进阶试题css(来自js高级前端开发---豪情)既然被发现了HOHO,那我就置顶了嘿嘿!觉得自己技术OK的可以把这套题目做完哦,然后加入高级前端的社区咯
http://www.cnblogs.com/jikey/p/4426105.html js高级前端开发加群方法(此群很难进,里面纯技术,严禁广告,水群) 完整题目做完发邮箱(jikeytang@16 ...
- web前端图片极限优化策略
随着web的发展,网站资源的流量也变得越来越大.据统计,60%的网站流量均来自网站图片,可见对图片合理优化可以大幅影响网站流量,减小带宽消耗和服务器压力. 一.现有web图片格式 我们先来看下现在常用 ...
- GIF/PNG/JPG和WEBP/base64/apng图片优点和缺点整理
GIF/PNG/JPG/WEBP/APNG都是属于位图(位图 ,务必区别于矢量图): GIF/PNG和JPG这三种格式的图片被广泛应用在现今的互联网中,gif曾在过去互联网初期慢速的情况下几乎是做到了 ...
- cg tut
Gesture Drawing with Alex Woo Gesture Drawing with Alex Woo and Louis Gonzales http://eisneim.com/?p ...
随机推荐
- python 常用网站
https://www.tutorialgateway.org/python-tutorial/
- 在状态栏增加图标(Android 6.0)
在Android 启动之后,在SystemServer.java的run方法中,调用了StatusBarManagerService的构造方法,在StatusBarManagerService的构造方 ...
- jmeter如何进行MQTT性能测试(测试前期准备二,MQTT插件及协议了解)
jmeter插件下载地址及使用,已经有大佬总结好了 大佬的博客地址: https://blog.csdn.net/yellowanwu/article/details/50889677 添加线程组:添 ...
- 拷贝一张图片,从一个目录到另外一个目录下(PS:是拷贝是不是移动)
package com.lanxi.demo2_6; import java.io.File; import java.io.FileInputStream; import java.io.FileN ...
- 关于JS 的cookie 操作 与 json 的数据结构 问题
今天写了一个购物车,由于购物车内容是保存在 cookie中 所以不想浪费服务器资源做cookie的操作 故在前端封装了一些对象来处理购物车,由于cookie的数据结构的设计是一个json格式 使用 账 ...
- spring-data-mongodb 使用原生aggregate语句
除了特殊注释外,本文的测试结果均基于 spring-data-mongodb:1.10.6.RELEASE(spring-boot-starter:1.5.6.RELEASE),MongoDB 3.0 ...
- Spring工作原理及应用
spring原理 内部最核心的就是IOC了,动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射,反射其实就是在运行时动态的去创建.调用对象,Spring就是在运行时 ...
- Vue源码之 diff Vnode
其实现在这个还没看懂,只能是初步看一下 _update调用__patch__方法,如果prevVnode(也就是oldVnode),旧vnode和新vnode对比,如果没有,就vnode就是vm.$e ...
- 【转载】linux top命令查看内存及多核CPU的使用讲述
转载 https://www.cnblogs.com/dragonsuc/p/5512797.html 查看多核CPU命令 mpstat -P ALL 和 sar -P ALL 说明:sar -P ...
- [Java concurrent][Collections]
同步容器类 同步容器类包括Vector和Hashtable,二者是早期JDK的一部分.以及一些在JDK1.2中添加的可以由Collections.synchronizedXxx等工厂方法创建的. 这些 ...