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算法竞赛入门班第九节课线段树练习题的主要内容,如果未能解决你的问题,请参考以下文章

2021算法竞赛入门班第二节课递归分治二分练习题

2021算法竞赛入门班第四节课搜索练习题

2021算法竞赛入门班第八节课数学习题

2021算法竞赛入门班第十节课字符串练习题

2021算法竞赛入门班第一节课枚举贪心习题

2021算法竞赛入门班第三节课堆栈队列并查集等习题