1 条题解
-
1Silence_sky LV 8 MOD @ 2017-08-18 23:14:37
二维树状数组,代码如下:
#include <iostream> #include <cstdio> #include <cstring> using namespace std; int n,m,q,opt,st,ed,x,y,ans; int t[1010][1010]; inline int get_num() { int now=0;int fh=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')fh=-1;ch=getchar();} while(ch>='0'&&ch<='9'){now=(now<<3)+(now<<1)+ch-'0';ch=getchar();} return now*fh; } inline int lowbit(int x){ return x&(-x); } inline int getsum(int x,int y){ int sum=0; for(int i=x;i>0;i-=lowbit(i)){ for(int j=y;j>0;j-=lowbit(j)){ sum+=t[i][j]; } } return sum; } inline void add(int x,int y,int val) { for(int i=x;i<1010;i+=lowbit(i)){ for(int j=y;j<1010;j+=lowbit(j)){ t[i][j]+=val; } } } int main() { n=get_num();m=get_num(); st=get_num();ed=get_num(); q=get_num(); for(int i=1;i<=q;i++){ opt=get_num(); x=get_num();y=get_num(); if(opt==0)add(x,y,1); if(opt==1)st=x,ed=y; ans=getsum(st,ed); printf("%d\n",ans); } return 0; }
- 1
信息
- 难度
- 8
- 分类
- (无)
- 标签
- (无)
- 递交数
- 18
- 已通过
- 6
- 通过率
- 33%
- 上传者