2021算法竞赛入门班第九节课线段树练习题
Posted 辉小歌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021算法竞赛入门班第九节课线段树练习题相关的知识,希望对你有一定的参考价值。
题单地址:https://ac.nowcoder.com/acm/problem/collection/1265?asc=true&order=difficulty
目录
情人节的电灯泡【二维树状数组 / 单点修改 区间查询】
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
int tr[N][N],a[N][N],n,m;
int lowbit(int x)return x&(-x);
void add(int x,int y,int v)
for(int i=x;i<=n;i+=lowbit(i))
for(int j=y;j<=n;j+=lowbit(j)) tr[i][j]+=v;
int query(int x,int y)
int sum=0;
for(int i=x;i;i-=lowbit(i))
for(int j=y;j;j-=lowbit(j)) sum+=tr[i][j];
return sum;
int sum(int x,int y,int xx,int yy)
return query(xx,yy)-query(x-1,yy)-query(xx,y-1)+query(x-1,y-1);
int main(void)
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j],add(i,j,a[i][j]);
while(m--)
int op; cin>>op;
if(op==1)
int x,y; cin>>x>>y;
if(sum(x,y,x,y)) add(x,y,-1);//是1,变为0
else add(x,y,1);//是0变为1
else
int x,y,xx,yy; cin>>x>>y>>xx>>yy;
cout<<sum(x,y,xx,yy)<<endl;
return 0;
以上是关于2021算法竞赛入门班第九节课线段树练习题的主要内容,如果未能解决你的问题,请参考以下文章