【BZOJ-1452】Count 树状数组 套 树状数组
1452: [JSOI2009]Count
Time Limit: 10 Sec Memory Limit: 64 MB
Submit: 1769 Solved: 1059
[Submit][Status][Discuss]
Description
Input
Output
Sample Input

Sample Output
2
HINT
Source
Solution
忽略标题的说法...撞壁用的....
简单题,裸树状数组套树状数组
颜色数目$c<=100$很小,考虑对于每种颜色单独进行处理
那么对于每个颜色单独开一个二维树状数组维护
另开一个二维数组记录下当前各个位置的颜色
1操作,将原有颜色树状数组中的$(x,y)$点置成0,在新颜色树状数组中置成1,并更新颜色的状态
2操作,区间查询,应用前缀和,进行一下加减即可得到当前子矩阵和
Code
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int read()
{
int x=,f=; char ch=getchar();
while (ch<'' || ch>'') {if (ch=='-') f=-; ch=getchar();}
while (ch>='' && ch<='') {x=x*+ch-''; ch=getchar();}
return x*f;
}
int n,m,q;int zt[][];
struct Treenode
{
int tree[][];
Treenode(){memset(tree,,sizeof(tree));}
int lowbit(int x){return x&-x;}
void change(int x,int y,int del)
{
for (int i=x; i<=n; i+=lowbit(i))
for (int j=y; j<=m; j+=lowbit(j))
tree[i][j]+=del;
}
int query(int x,int y)
{
int ans=;
for (int i=x; i; i-=lowbit(i))
for (int j=y; j; j-=lowbit(j))
ans+=tree[i][j];
return ans;
}
int ask(int x1,int y1,int x2,int y2)
{
return query(x2,y2)-query(x2,y1-)-query(x1-,y2)+query(x1-,y1-);
}
}color[]; int main()
{
n=read(); m=read();
for (int i=; i<=n; i++)
for (int col,j=; j<=m; j++)
col=read(),color[col].change(i,j,),zt[i][j]=col;
q=read();
for (int i=; i<=q; i++)
{
int opt=read(),x1,y1,x2,y2,col;
if (opt==)
{
x1=read(),y1=read(),col=read();
color[zt[x1][y1]].change(x1,y1,-);
zt[x1][y1]=col;
color[col].change(x1,y1,);
continue;
}
x1=read(),x2=read(),y1=read(),y2=read(),col=read();
printf("%d\n",color[col].ask(x1,y1,x2,y2));
}
return ;
}
5分钟不到,看、想、写、1A系列....
【BZOJ-1452】Count 树状数组 套 树状数组的更多相关文章
- 【BZOJ】1047: [HAOI2007]理想的正方形(单调队列/~二维rmq+树状数组套树状数组)
http://www.lydsy.com/JudgeOnline/problem.php?id=1047 树状数组套树状数组真心没用QAQ....首先它不能修改..而不修改的可以用单调队列做掉,而且更 ...
- BZOJ.2588.Count on a tree(主席树 静态树上第k小)
题目链接 /* 序列上的主席树 某点是利用前一个点的根建树 同理 树上的主席树 某个节点可以利用其父节点(is unique)的根建树 排名可以利用树上前缀和求得: 对于(u,v),w=LCA(u,v ...
- BZOJ 1452 Count(二维树状数组)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1452 题意:给出一个数字矩阵(矩阵中任何时候的数字均为[1,100]),两种操作:(1) ...
- BZOJ 1452 Count(二维树状数组)
大水题. 建立100个二维树状数组,总复杂度就是O(qlognlogm). # include <cstdio> # include <cstring> # include & ...
- BZOJ 1452 Count 【模板】二维树状数组
对每种颜色开一个二维树状数组 #include<cstdio> #include<algorithm> using namespace std; ; ][maxn][maxn] ...
- poj 2155 Matrix---树状数组套树状数组
二维树状数组模版,唯一困难,看题!!(其实是我英语渣) Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 22098 ...
- BZOJ 1452 Count
长知识啦..二维BIT. #include<iostream> #include<cstdio> #include<cstring> #include<alg ...
- 【BZOJ】1901: Zju2112 Dynamic Rankings(区间第k小+树状数组套主席树)
http://www.lydsy.com/JudgeOnline/problem.php?id=1901 首先还是吐槽时间,我在zoj交无限tle啊!!!!!!!!我一直以为是程序错了啊啊啊啊啊啊. ...
- bzoj 1176 cdq分治套树状数组
题面: 维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数M<=160000,询问数Q<=10000,W<=2000000. Inp ...
随机推荐
- 三维世界的Gizmos
Unity和Maya 今天在美术同事那儿了解些Maya常识,加上自己在Unity3D中的一点儿小操作,记录一下Gizmos 之前就知道Maya和Unity3D的轴向是一致的,在同事那儿看他操作Maya ...
- emberjs创建类
创建一个Person类Person = Ember.Object.extend({ say: function(thing) { alert(thing); } }); 创建一个Person对象也就是 ...
- f2fs解析(十)nid 如何从nat_root中删除
上面我们谈到了一个nid如何从free_nid中转移到node_info中去[分别有一个链表和一棵基数树搭伙做事],讲free_nid时,详细说明了free_nid中是如何进如何出的,上一篇说了nid ...
- POJ 3461 Oulipo
E - Oulipo Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit ...
- 012医疗项目-模块一:统一异常处理器的设计思路及其实现(涉及到了Springmvc的异常处理流程)
我们上一篇文章是建立了一个自定义的异常类,来代替了原始的Exception类.在Serice层抛出异常,然后要在Action层捕获这个异常,这样的话在每个Action中都要有try{}catch{}代 ...
- 12Mybatis_用mapper代理的方式去开发以及总结mapper开发的一些问题
上一篇文章总结了一些Dao开发的问题,所以我们这里开始讲一种mapper代理的方式去开发. 我先给出mapper代理开发的思路(mapper代理开发的规范): 我们用mapper代理开发时要写2个: ...
- Enabling CORS in WCF
Introduction This is an intermediate example of WCF as REST based solution and enabling CORS access, ...
- ZooKeeper学习第四期---构建ZooKeeper应用
一.配置服务 配置服务是分布式应用所需要的基本服务之一,它使集群中的机器可以共享配置信息中那些公共的部分.简单地说,ZooKeeper可以作为一个具有高可用性的配置存储器,允许分布式应用的参与者检索和 ...
- vbs test
'-----------------------------------Class clsGetProfilePrivate rootDocPublic Sub setProfile(strFileN ...
- Android Edittext点击全选输入框内容