[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 ...
随机推荐
- 进程pid理解
PID(Process Identification)操作系统里指进程识别号,也就是进程标识符.操作系统里每打开一个程序都会创建一个进程ID,即PID. PID(进程控制符)英文全称为Proces ...
- oralce定时任务
oracle定时任务(dbms_job) author:skate time:2007-09-12 http://publish.it168.com/2006/0311/20060311017002. ...
- LeetCode算法历程-01
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 15], target ...
- Excel文件上传功能实现
$(function(){ let file; //上传点击事件 $('#btn').bind('click', function(){ let val = $('#fb').filebox('get ...
- 三星S8相机黑画面解决
最近手机刷机卸载系统软件后有遇到相机黑化面不能工作的情况,同时闪光灯也无法开启,人脸识别也无法使用.具体情况如下图. 后来接上电脑打开logcat,发现相机相关的错误,说libquramresize. ...
- golang反射
要点 1.变量 2.反射 3.结构体反射 4.反射总结以及应用场景 一.变量介绍 1.变量的内在机制 A.类型信息,这部分是元信息,是预定义好的 B.值类型,这部分是程序运行过程中,动态改变的 var ...
- 练习UML类图中的类的表示
第一部分:UML类图(class diagram) 类图用来展现一组类.类的特性以及其类相互之间的关系,一个类图由一组类以及它们之间的关系构成,类图用来对系统的领域概念以及静态结构进行建模. 在软件模 ...
- javaEE练习(商城练习)
今天写一个商城的练习,综合之前学习过的servlet和el表达式,来一个综合的练习: 需要用到的数据库有: /* Navicat MySQL Data Transfer Source Server : ...
- dubbo could not get local host ip address will use 127.0.0.1 instead 异常处理
dubbo could not get local host ip address will use 127.0.0.1 instead 查看hostname localhost:spring wls ...
- 剑指Offer 66. 机器人的运动范围 (回溯)
题目描述 地上有一个m行和n列的方格.一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子. 例如,当k为18时,机器人能 ...