传送门

线段树区间修改傻题

#include <cstdio>
#include <cstring>
#include <iostream>
#define N 50001
#define root 1, 1, n
#define ls now << 1, l, mid
#define rs now << 1 | 1, mid + 1, r int n, m, q, res;
int ans[16][N << 2], sum[16][N][2], add[16][N << 2];
char s[N];
//sum[i][j]表示第i列前j个中0的个数 inline int read()
{
int x = 0, f = 1;
char ch = getchar();
for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = -1;
for(; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + ch - '0';
return x * f;
} inline void build(int id, int now, int l, int r)
{
if(l == r)
{
ans[id][now] = sum[id][l][0] - sum[id][l - 1][0];
return;
}
int mid = (l + r) >> 1;
build(id, ls);
build(id, rs);
ans[id][now] = ans[id][now << 1] + ans[id][now << 1 | 1];
} inline void push_down(int id, int now, int l, int r)
{
if(add[id][now] ^ -1)
{
int mid = (l + r) >> 1;
add[id][now << 1] = add[id][now];
add[id][now << 1 | 1] = add[id][now];
ans[id][now << 1] = sum[id][mid][add[id][now]] - sum[id][l - 1][add[id][now]];
ans[id][now << 1 | 1] = sum[id][r][add[id][now]] - sum[id][mid][add[id][now]];
add[id][now] = -1;
}
} inline void update(int id, int now, int l, int r, int x, int y, int c)
{
if(x <= l && r <= y)
{
add[id][now] = c;
ans[id][now] = sum[id][r][c] - sum[id][l - 1][c];
return;
}
push_down(id, now, l, r);
int mid = (l + r) >> 1;
if(x <= mid) update(id, ls, x, y, c);
if(mid < y) update(id, rs, x, y, c);
ans[id][now] = ans[id][now << 1] + ans[id][now << 1 | 1];
} int main()
{
int i, j, r1, r2, c1, c2, x;
n = read();
m = read();
q = read();
for(i = 1; i <= n; i++)
{
scanf("%s", s + 1);
for(j = 1; j <= m; j++)
{
sum[j][i][0] = sum[j][i - 1][0] + (s[j] == '0');
sum[j][i][1] = sum[j][i - 1][1] + (s[j] == '1');
}
}
for(i = 1; i <= m; i++) build(i, root);
memset(add, -1, sizeof(add));
while(q--)
{
r1 = read();
r2 = read();
c1 = read();
c2 = read();
x = read();
res = 0;
for(i = c1; i <= c2; i++)
update(i, root, r1, r2, x);
for(i = 1; i <= m; i++) res += ans[i][1];
printf("%d\n", res);
}
return 0;
}

  

最新文章

  1. 【转】OpenGL多线程创建纹理,附加我的测试结果
  2. leetcode216-Combination Sum III
  3. win10 localhost 解析为 ipv6地址 ::1 的解决办法
  4. 使用while循环语句和变量输出九九乘法表
  5. python---sys
  6. 朝花夕拾-android 从手机选择图片或拍照设置头像
  7. AE开发 入门教程
  8. 关于web上的图片格式问题,新的彩蛋
  9. LoadRunner基础入门教程
  10. 11G在线重建索引
  11. (转)java 多线程 CountDownLatch用法
  12. 再学习之MyBatis
  13. jQuery使用():Callbacks回调函数列表之异步编程(含源码分析)
  14. vins-mono:雅可比矩阵的推导
  15. java工具类——java将一串数据按照gzip方式压缩和解压缩
  16. Python3-join()和split()
  17. delphi 学习笔记的例子
  18. 一劳永逸的搞定 FLEX 布局(转)
  19. caffe学习记录
  20. [py]一些搜集到的问题

热门文章

  1. Lucene-安装和运行Demo程序
  2. 数据库web项目对数据库的操作
  3. CPP-网络/通信:WebService
  4. dhtmlTree简单实例以及基本参数设置
  5. 欧几里得(辗转相除gcd)、扩欧(exgcd)、中国剩余定理(crt)、扩展中国剩余定理(excrt)简要介绍
  6. 使用python制作查询火车票工具
  7. 气泡小角的css实现
  8. C语言获取Shell返回结果
  9. sram bist scripts
  10. Linux中的定时任务简单操作实例