hdu 2642 stars
来源:互联网 发布:linux组织文件目录结构 编辑:程序博客网 时间:2024/04/25 15:04
二维的树状数组模板
int lowbit(int x){ return x & (-x);}void modify(int x,int y,int data){ for(int i=x;i<MAXN;i+=lowbit(i)) for(int j=y;j<MAXN;j+=lowbit(j)) a[i][j]+=data;}int get_sum(int x,int y){ int res=0; for(int i=x;i>0;i-=lowbit(i)) for(int j=y;j>0;j-=lowbit(j)) res+=a[i][j]; return res;}直接套模板就行了。
因为本身的区间坐标涉及0 所以要输入的坐标+1 向后推一下。
二维求和涉及一个基本的容斥。
#include<bits/stdc++.h>#define N 1011#define LL long longusing namespace std;int n,a[N][N];bool flag[N][N];int lowbit(int x){ return x&(-x);}int sw(int x,int y,int temp){ for(int i=x;i<N;i+=lowbit(i)) for(int j=y;j<N;j+=lowbit(j)) a[i][j]+=temp;}int sum(int x,int y){ int s=0; for(int i=x;i>0;i-=lowbit(i)) for(int j=y;j>0;j-=lowbit(j)) s+=a[i][j]; return s;}int main(){ int T,n,m,x1,x2,y1,y2,ans; char ch; scanf("%d",&T); memset(flag,false,sizeof(flag)); memset(a,0,sizeof(a)); while(T--) { getchar(); scanf("%c",&ch); if(ch=='B') { scanf("%d%d",&n,&m); n+=1;m+=1; if(flag[n][m]) continue; sw(n,m,1); flag[n][m]=true; } else if(ch=='D') { scanf("%d%d",&n,&m); n+=1;m+=1; if(!flag[n][m]) continue; sw(n,m,-1); flag[n][m]=false; } else { scanf("%d%d%d%d",&x1,&x2,&y1,&y2); x1+=1,x2+=1,y1+=1,y2+=1; if(x1>x2) swap(x1,x2); if(y1>y2) swap(y1,y2); ans=sum(x2,y2)-sum(x1-1,y2)-sum(x2,y1-1)+sum(x1-1,y1-1); printf("%d\n",ans); } } return 0;}
0 0
- HDU 2642 Stars
- hdu 2642 Stars
- HDU 2642 Stars
- hdu 2642 Stars
- HDU - 2642 Stars
- HDU-2642-Stars
- hdu 2642 Stars
- hdu 2642 stars
- HDU Stars
- Stars HDU
- HDU 2642 stars ||HDU 1892 See you~
- hdu 2642stars(二维树状数组)
- HDU 2642 stars 二维树状数组
- hdu 2642 stars (二维树状数组)
- HDU 2642 Stars (二维树状数组)
- HDU 2642 Stars(二维树状数组)
- hdu 2642 Stars(二维树状数组)
- hdu- 2642 Stars 二维树状数组
- LeetCode----sum-root-to-leaf-numbers
- 深入理解 MessageQueue , Message , Looper , Handler
- java使用url读取网页资源
- 仿美团首页功能选择的实现
- iostream流库
- hdu 2642 stars
- AIDL详解
- Retrofit的初步使用
- 【c++】构建一棵简单的二叉树
- 蓝牙之十六-测试认证
- UVa 227 Puzzle(谜题)
- Java实现快速,选择,希尔,归并排序算法
- LeetCode 199.Binary Tree Right Side View
- web文章收录