线段树水题,考虑到只有15列,所以我们对于每一列,我们都去维护一个线段树。

现在来考虑一下修改操作,因为每次修改的时候,我们都是将黑的改成白的,白的改成黑的,所以我们对线段树的每个节点维护当前这段区间和原来颜色相同的点的个数,所以每次改成白色我们只需要找原来是白色的总数,或者黑色,所以就特别简单了。

下面是代码。

//author Eterna
#define Hello the_cruel_world!
#pragma GCC optimize(2)
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<string>
#include<cstring>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<utility>
#include<cmath>
#include<climits>
#include<deque>
#include<functional>
#include<complex>
#include<numeric>
#include<unordered_map>
#define max(x,y) ((x)>(y)?(x):(y))
#define min(x,y) ((x)<(y)?(x):(y))
#define Pi acos(-1.0)
#define ABS(x) ((x) >= 0 ? (x) : (-(x)))
#define pb(x) push_back(x)
#define lowbit(x) (x & -x)
#define FRIN freopen("C:\\Users\\Administrator.MACHENI-KA32LTP\\Desktop\\in.txt", "r", stdin)
#define FROUT freopen("C:\\Users\\Administrator.MACHENI-KA32LTP\\Desktop\\out.txt", "w", stdout)
#define FAST ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define outd(x) printf("%d\n", x)
#define outld(x) printf("%lld\n", x)
#define il inline
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
const int maxn = 5e4;
const int INF = 0x7fffffff;
const int mod = 1e9 + 7;
const double eps = 1e-7;
inline int read_int() {
char c;
int ret = 0, sgn = 1;
do { c = getchar(); } while ((c < '0' || c > '9') && c != '-');
if (c == '-') sgn = -1; else ret = c - '0';
while ((c = getchar()) >= '0' && c <= '9') ret = ret * 10 + (c - '0');
return sgn * ret;
}
inline ll read_ll() {
char c;
ll ret = 0, sgn = 1;
do { c = getchar(); } while ((c < '0' || c > '9') && c != '-');
if (c == '-') sgn = -1; else ret = c - '0';
while ((c = getchar()) >= '0' && c <= '9') ret = ret * 10 + (c - '0');
return sgn * ret;
}
int white[16][maxn + 5], black[16][maxn + 5];
int arr[16][4 * maxn + 5], lazy[16][4 * maxn + 5];
char s[20];
il void Push_Up(int id, int index) {
arr[id][index] = arr[id][2 * index] + arr[id][2 * index + 1];
}
il void Change(int id, int index, int L, int R, int color) {
if (color) {
int sum = black[id][R] - black[id][L - 1];
arr[id][index] = sum;
}
else {
int sum = white[id][R] - white[id][L - 1];
arr[id][index] = sum;
}
}
il void Push_Down(int id, int index, int L, int R) {
int mid = L + R >> 1;
Change(id, 2 * index, L, mid, lazy[id][index]);
Change(id, 2 * index + 1, mid + 1, R, lazy[id][index]);
lazy[id][2 * index] = lazy[id][2 * index + 1] = lazy[id][index];
lazy[id][index] = -1;
}
void Build(int id, int index, int L, int R) {
lazy[id][index] = -1;
if (L == R) {
arr[id][index] = white[id][L];
return;
}
int mid = L + R >> 1;
Build(id, 2 * index, L, mid);
Build(id, 2 * index + 1, mid + 1, R);
Push_Up(id, index);
}
void Update(int id, int index, int L, int R, int UL, int UR, int c) {
if (L >= UL && R <= UR) {
Change(id, index, L, R, c);
lazy[id][index] = c;
return;
}
if (lazy[id][index] != -1)Push_Down(id, index, L, R);
int mid = L + R >> 1;
if (mid >= UL)Update(id, 2 * index, L, mid, UL, UR, c);
if (UR > mid) Update(id, 2 * index + 1, mid + 1, R, UL, UR, c);
Push_Up(id, index);
}
il int Query(int m) {
int res = 0;
for (int i = 1; i <= m; ++i)res += arr[i][1];
return res;
}
int n, m, r1, r2, c1, c2, q, c, cnt;
int main()
{
n = read_int(), m = read_int(), q = read_int();
for (int i = 1; i <= n; ++i) {
scanf("%s", s + 1);
for (int j = 1; j <= m; ++j) {
if (s[j] == '1') black[j][i] = 1;
else white[j][i] = 1, ++cnt;
}
}
for (int i = 1; i <= m; ++i)Build(i, 1, 1, n);
for (int i = 1; i <= m; ++i)
for (int j = 1; j <= n; ++j) {
white[i][j] += white[i][j - 1];
black[i][j] += black[i][j - 1];
}
while (q--) {
r1 = read_int(), r2 = read_int(), c1 = read_int(), c2 = read_int(), c = read_int();
for (int i = c1; i <= c2; ++i)Update(i, 1, 1, n, r1, r2, c);
outd(Query(m));
}
//system("pause");
return 0;
}

  

P2930 [USACO09HOL]假期绘画Holiday Painting的更多相关文章

  1. [USACO09HOL]假期绘画Holiday Painting

    观察到列数只有15,可以想到对于每一列维护一颗线段树 sum表示该区间与目标矩阵中该区间相同元素个数 lazy表示该区间应被修改成什么颜色 g即目标矩阵中该区间白色格子的个数 显然一个区间的sum=区 ...

  2. [bzoj1582][Usaco2009 Hol]Holiday Painting 节日画画_线段树

    Holiday Painting 节日画画 bzoj-1582 Usaco-2009 Hol 题目大意:给定两个n*m的01网格图.q次操作,每次将第二个网格图的子矩阵全部变成0或1,问每一次操作后两 ...

  3. [BZOJ1582] [Usaco2009 Hol]Holiday Painting 节日画画(线段树)

    传送门 线段树区间修改傻题 #include <cstdio> #include <cstring> #include <iostream> #define N 5 ...

  4. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  5. 关于图片的PNG与JPG、JIF格式

    一:GIF(Graphics Interchange Format) 简介 GIF图形交换格式是一种位图图形文件格式,以8位色(即256种颜色)重现真彩色的图像. 它实际上是一种压缩文档,采用LZW压 ...

  6. 前端进阶试题css(来自js高级前端开发---豪情)既然被发现了HOHO,那我就置顶了嘿嘿!觉得自己技术OK的可以把这套题目做完哦,然后加入高级前端的社区咯

    http://www.cnblogs.com/jikey/p/4426105.html js高级前端开发加群方法(此群很难进,里面纯技术,严禁广告,水群) 完整题目做完发邮箱(jikeytang@16 ...

  7. web前端图片极限优化策略

    随着web的发展,网站资源的流量也变得越来越大.据统计,60%的网站流量均来自网站图片,可见对图片合理优化可以大幅影响网站流量,减小带宽消耗和服务器压力. 一.现有web图片格式 我们先来看下现在常用 ...

  8. GIF/PNG/JPG和WEBP/base64/apng图片优点和缺点整理

    GIF/PNG/JPG/WEBP/APNG都是属于位图(位图 ,务必区别于矢量图): GIF/PNG和JPG这三种格式的图片被广泛应用在现今的互联网中,gif曾在过去互联网初期慢速的情况下几乎是做到了 ...

  9. cg tut

    Gesture Drawing with Alex Woo Gesture Drawing with Alex Woo and Louis Gonzales http://eisneim.com/?p ...

随机推荐

  1. R语言最优化(多维)

    线性搜索的最速上升法 #### max.search <- function(f, x, y, tol=1e-9, a.max = 2^5){ if(sum(abs(y)) == 0) retu ...

  2. Python入门学习例子——从Hao123获取图片

    import urllib.requestimport re #获取html页面内容def getHtml(url): data=urllib.request.urlopen(url) pageCon ...

  3. git clone 带用户名密码

    git使用用户名密码clone的方式: git clone http://username:password@remote eg: username:  abc@qq.com, pwd: test, ...

  4. php websocket

    php websocket项目开发,推荐使用:Workerman 本片内容使用Workerman实现了简单的及时聊天功能,具体代码如下: <?php // phpinfo(); header(' ...

  5. ;html5斜体字

    font-style:italic; italic|oblique|normal 依次倾斜,越来越邪:

  6. linux启动流程的理解

    1.bios 2.grub 选择 3.内核自解压vmlinux 4.内核引导的模式与变量(引导期内存分页映射)设置 #汇编级 5.内核内存再分页(内存空间映射),宏定义与设置,初始化consol,启动 ...

  7. C++面试笔记(2)

    11 explicit 显式构造函数 explicit修饰的构造函数可用来防止隐式转换 class Test1 { public: Test1(int n) // 普通构造函数 { num=n; } ...

  8. 马凯军201771010116《面向对象与程序设计Java》第十周学习总结

    一.理论知识学习部分 泛型类的约束与局限性: 不能用基本类型实例化类型参数 运行时类型查询只适用于原始类型 不能抛出也不能捕获泛型类实例 参数化类型的数组不合法 不能实例化类型变量 泛型类的 ...

  9. FUJI 富士 富仕 串口 N500I N700I 连接

    本人丰富的硬件连接经验, 1.出售富士生化设备N500I, N700I 接入,C#代码demo,  可连接机器验证,验证后付款2. 提供宠物行业富士生化设备N500I, N700I型号接入软件技术支持 ...

  10. bootstrap-edittable 使用笔记之 (select, data,text, number)

    可编辑列表的数据格式可以指定,常用的有select, data, text, number.代码如下. 前端代码: <table id="tb_product" class= ...