1452: [JSOI2009]Count
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1452: [JSOI2009]Count相关的知识,希望对你有一定的参考价值。
2016-06-20
一读完题,就知道这是一个数据结构体,c只有100这么小,那我们就用100课二维树状数组来维护就行了。树状数组绝对是世上最美妙的数据结构(果然我这种蒟蒻只能做这种sb题)
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<cstdlib> 5 #include<algorithm> 6 #include<queue> 7 #define M 309 8 #define ll long long 9 #define Mo 12345678 10 using namespace std; 11 ll read() 12 { 13 char ch=getchar(); 14 ll x=0,f=1; 15 for(;ch<‘0‘||ch>‘9‘;ch=getchar()) 16 if(ch==‘-‘) 17 f=-1; 18 for(;ch>=‘0‘&&ch<=‘9‘;ch=getchar()) 19 x=x*10+ch-‘0‘; 20 return x*f; 21 } 22 int n,m,a[M][M],shu[109][M][M]; 23 void jia(int x,int i,int j) 24 { 25 for(;i<=n;i+=i&-i) 26 for(int k=j;k<=m;k+=k&-k) 27 shu[x][i][k]++; 28 } 29 void jian(int x,int i,int j) 30 { 31 for(;i<=n;i+=i&-i) 32 for(int k=j;k<=m;k+=k&-k) 33 shu[x][i][k]--; 34 } 35 int query(int x,int i,int j) 36 { 37 int ans=0; 38 for(;i;i-=i&-i) 39 for(int k=j;k;k-=k&-k) 40 ans+=shu[x][i][k]; 41 return ans; 42 } 43 int main() 44 { 45 n=read(); 46 m=read(); 47 for(int i=1;i<=n;i++) 48 for(int j=1;j<=m;j++) 49 { 50 a[i][j]=read(); 51 jia(a[i][j],i,j); 52 } 53 int q=read(); 54 for(int i=1;i<=q;i++) 55 { 56 int k=read(),x1=read(),x2,y1,y2,c; 57 if(k==1) 58 { 59 y1=read(); 60 c=read(); 61 jian(a[x1][y1],x1,y1); 62 jia(c,x1,y1); 63 a[x1][y1]=c; 64 } 65 else 66 { 67 x2=read(); 68 y1=read(); 69 y2=read(); 70 c=read(); 71 printf("%d\n",query(c,x2,y2)-query(c,x2,y1-1)-query(c,x1-1,y2)+query(c,x1-1,y1-1)); 72 } 73 } 74 return 0; 75 }
以上是关于1452: [JSOI2009]Count的主要内容,如果未能解决你的问题,请参考以下文章