码迷,mamicode.com
首页 > 其他好文 > 详细

bzoj 1452

时间:2017-10-30 16:01:40      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:for   name   ace   span   树状   容斥   get   oid   +=   

裸二维树状数组。

输出的时候要记得容斥。

#include<cstdio>
#include<cctype>
#include<algorithm>
using namespace std;
int read(){
    char c; while(!isdigit(c=getchar())); int x=c-0;
    while(isdigit(c=getchar())) x=x*10+c-0; return x;
}
int n,m,c[101][301][301],a[301][301];
void add(int x,int i,int q,int v){
    for(;i<=n;i+=i&-i)
        for(int j=q;j<=m;j+=j&-j)
            c[x][i][j]+=v;
}
int ask(int i,int q,int v){
    int ans=0;
    for(;i;i-=i&-i)
        for(int j=q;j;j-=j&-j)
            ans+=c[v][i][j];
    return ans;
}
int main(){
    n=read(),m=read();
    for(int i=1;i<=n;i+=1)
        for(int j=1;j<=m;j+=1)
            add(a[i][j]=read(),i,j,1);
    int q=read();
    while(q--){
        int o=read();
        if(o==1){
            int x=read(),y=read(),c=read();
            add(a[x][y],x,y,-1);
            add(a[x][y]=c,x,y,1);
        }else{
            int x1=read()-1,x2=read(),y1=read()-1,y2=read(),c=read();
            printf("%d\n",ask(x2,y2,c)+ask(x1,y1,c)-ask(x2,y1,c)-ask(x1,y2,c));
        }
    }
    return 0;
}

 

bzoj 1452

标签:for   name   ace   span   树状   容斥   get   oid   +=   

原文地址:http://www.cnblogs.com/oris71/p/7754576.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!