博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 1452: [JSOI2009]Count [二维树状数组]
阅读量:5046 次
发布时间:2019-06-12

本文共 1481 字,大约阅读时间需要 4 分钟。

题意:修改一个位置的颜色,询问子矩阵某种颜色的数量,颜色$\le\ 100$


 

$fuck$我个沙茶连树状数组都不会写了,没用$lowbit()$没用$i,j$

每种颜色开一个二维树状数组....

#include 
#include
#include
#include
using namespace std;typedef long long ll;const int N=301,M=101;inline int read(){ char c=getchar();int x=0,f=1; while(c<'0'||c>'9'){
if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();} return x*f;}int n,m,c[M][N][N],col[N][N];int Q,op,x,y,x1,y1,x2,y2,v;inline int lowbit(int x){
return x&-x;}inline void add(int c[N][N],int x,int y,int v){ for(int i=x;i<=n;i+=lowbit(i)) for(int j=y;j<=m;j+=lowbit(j)) c[i][j]+=v;}inline int sum(int c[N][N],int x,int y){ int re=0; for(int i=x;i;i-=lowbit(i)) for(int j=y;j;j-=lowbit(j)) re+=c[i][j]; return re;}int main(){ freopen("in","r",stdin); n=read();m=read(); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){ col[i][j]=read(); add(c[col[i][j]],i,j,1); } Q=read(); while(Q--){ op=read(); if(op==1){ x=read();y=read();v=read(); add(c[col[x][y]],x,y,-1); col[x][y]=v; add(c[col[x][y]],x,y,1); }else{ x1=read()-1;x2=read();y1=read()-1;y2=read();v=read(); int ans=sum(c[v],x2,y2)-sum(c[v],x1,y2)-sum(c[v],x2,y1)+sum(c[v],x1,y1); printf("%d\n",ans); } }}

 

转载于:https://www.cnblogs.com/candy99/p/6435356.html

你可能感兴趣的文章
编译Linux驱动程序 遇到的问题
查看>>
大型分布式网站架构技术总结
查看>>
HDU 1017[A Mathematical Curiosity]暴力,格式
查看>>
[算法之美] KMP算法的直观理解
查看>>
EntityFramework 性能优化
查看>>
【ASP.NET开发】菜鸟时期的ADO.NET使用笔记
查看>>
android圆角View实现及不同版本号这间的兼容
查看>>
OA项目设计的能力③
查看>>
Cocos2d-x3.0 文件处理
查看>>
全面整理的C++面试题
查看>>
Activity和Fragment生命周期对比
查看>>
OAuth和OpenID的区别
查看>>
android 分辨率自适应
查看>>
查找 EXC_BAD_ACCESS 问题根源的方法
查看>>
国外媒体推荐的5款当地Passbook通行证制作工具
查看>>
日常报错
查看>>
list-style-type -- 定义列表样式
查看>>
hibernate生成表时,有的表可以生成,有的却不可以 2014-03-21 21:28 244人阅读 ...
查看>>
mysql-1045(28000)错误
查看>>
Ubuntu 编译出现 ISO C++ 2011 不支持的解决办法
查看>>