欢迎访问~原文出处——博客园-zhouzhendong

去博客园看该题解


题目传送门 - BZOJ1452


题意概括

  一个n*m的矩阵,现在有2种操作:

  1. 修改某一个位置的值
  2. 求一个子矩阵某值的出现次数

  n , m ≤ 300 ,  1 ≤ 元素的值 ≤ 100 , 操作次数 ≤ 200000


题解

  100棵二维树状数组。维护每个值的二维前缀出现次数。

  好像该说的都说了……


代码

#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstdio>
using namespace std;
const int N=300+5,C=100+5;
int n,m,q,a[N][N],t[C][N][N];
int lowbit(int x){return x&-x;
}
void add(int c,int x,int y,int d){for (int i=x;i<=n;i+=lowbit(i))for (int j=y;j<=m;j+=lowbit(j))t[c][i][j]+=d;
}
int sum(int c,int x,int y){int ans=0;for (int i=x;i>0;i-=lowbit(i))for (int j=y;j>0;j-=lowbit(j))ans+=t[c][i][j];return ans;
}
int main(){scanf("%d%d",&n,&m);memset(t,0,sizeof t);for (int i=1;i<=n;i++)for (int j=1;j<=m;j++){scanf("%d",&a[i][j]);add(a[i][j],i,j,1);}scanf("%d",&q);while (q--){int type,c;scanf("%d",&type);if (type==1){int x,y;scanf("%d%d%d",&x,&y,&c);add(a[x][y],x,y,-1);a[x][y]=c;add(a[x][y],x,y,1);}else {int x1,y1,x2,y2;scanf("%d%d%d%d%d",&x1,&x2,&y1,&y2,&c);printf("%d\n",sum(c,x2,y2)-sum(c,x1-1,y2)-sum(c,x2,y1-1)+sum(c,x1-1,y1-1));}}return 0;
}
/*
3 3
1 2 3
3 2 1
2 1 3
3
2 1 2 1 2 1
1 2 3 2
2 2 3 2 3 2
*/

  

转载于:https://www.cnblogs.com/zhouzhendong/p/BZOJ1452.html

BZOJ1452 [JSOI2009]Count 树状数组相关推荐

  1. 【BZOJ1452】[JSOI2009]Count(树状数组)

    [BZOJ1452][JSOI2009]Count(树状数组) 题面 BZOJ 洛谷 题解 数据范围这么小?不是对于每个颜色开一个什么东西记一下就好了吗. 然而我不会二维树状数组? 不存在的,凭借多年 ...

  2. 二维树状数组(bzoj 1452: [JSOI2009]Count)

    1452: [JSOI2009]Count Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 2496  Solved: 1451 [Submit][St ...

  3. 二维树状数组 BZOJ 1452 [JSOI2009]Count

    题目链接 裸二维树状数组 #include <bits/stdc++.h>const int N = 305; struct BIT_2D {int c[105][N][N], n, m; ...

  4. 【CF1194E】Count The Rectangles【类扫描线】【单调性】【树状数组】

    传送门 题意:给定NNN条与坐标轴平行的线段,保证不垂直的线段没有交点,求一共构成多少个矩形(以线段交点为顶点). 1≤N≤50001\leq N\leq50001≤N≤5000 显然是个数据结构乱搞 ...

  5. poj_3067 树状数组

    题目大意 左右两个竖排,左边竖排有N个点,从上到下依次标记为1,2,...N; 右边竖排有M个点,从上到下依次标记为1,2....M.现在从K条直线分别连接左边一个点和右边一个点,求这K条直线的交点个 ...

  6. 树状数组 ---- 树状数组+动态维护前缀中位数 D. Omkar and Medians

    题目大意: 解题思路: 首先我们看他们的定义: bib_ibi​是a1,a2,a3,....,ai,ai+1,.......a2i−1a_1,a_2,a_3,....,a_i,a_{i+1},.... ...

  7. 树上启发式合并问题 ---- D. Tree and Queries[树上启发式合并+树状数组]

    题目链接 题目大意: 就是给你一棵树,树上每个节点都有一个颜色,在你mmm次询问每次询问给你一个节点uuu和一个数字kkk,问你在uuu这颗子树里面又少种颜色的结点个数是大于kkk; 解题思路: 看到 ...

  8. C - Group HDU - 4638[离线+树状数组]

    感觉比较抽象:举个例子:a[] = {3 1 2 5 4} 树状数组里面:1,1,-1,1,-1 sum(2):就是[1,2]区间能分成多少个连续的段:1和3 sum(3):1 2 3是一段 如果是询 ...

  9. poj 2352 Stars 线段树(先建后查/边建边查)/树状数组三种方法思路详解,带你深入了解线段树难度⭐⭐⭐★

    poj 2352 Stars 目录 poj 2352 Stars 1.树状数组 2.线段树,先建树后查找 3.线段树,边建树边查找 Description Astronomers often exam ...

最新文章

  1. 【全网之最】全网最简洁判断JavaScript中字符串是否以某一个特定字符串结尾的方法,多用于判断文件名的后缀(格式)
  2. 一目了然了解JAVA集合体系
  3. CV04-UNet笔记
  4. BZOJ3782 上学路线 【dp + Lucas + CRT】
  5. Swift类与OC类方法相互调用的
  6. 勘误《iOS网络高级编程:iPhone和iPad的企业应用开发》
  7. android基础(基本框架的构成)
  8. 卡尔曼滤波器原理和matlab实现
  9. Linux01-Linux文本编辑器vim编辑器深入详解22
  10. log4j2logback打印日志的效率问题【细节3】bean属性拷贝【细节4】
  11. WPF MVVM实例三
  12. 浅谈Log4net在项目中如何记录日志
  13. python中的event_Python event
  14. Android打包编译shrinkResources true报错解决方案
  15. Window插件获取窗口坐标
  16. 学习 Python,这 22 个包怎能不掌握?
  17. Linux清除用户登录记录和命令历史方法
  18. Linux kernel SMP 中断机制
  19. 解决模拟器Emulator: emulator: ERROR: x86 emulation currently requires hardware acceleration!问题
  20. html定义微调器,bootstrap4 input数值微调插件

热门文章

  1. HL7 ADT Message Sample
  2. 字符编码笔记:ASCII,Unicode和UTF-8(转) + BASE64
  3. Navicat 9如何连接ORACLE10G数据库
  4. 学习.NET的两个网站:MSDN和Asp .NET
  5. Python--day43--增删改查补充和limit以及order by
  6. 偷天换日——新型浏览器劫持木马“暗影鼠”分析
  7. Vcenter一次性将服务器四个网卡从端口组迁移到分布式交换机的方法
  8. Ubuntu-16.04 部署 OpenStack Ocata下
  9. CentOS7 redis-3.2.8 从单机到主从再到集群配置
  10. VMware中装Win2012并配置Hyper-v