CF竞赛题目讲解_CF707E(树状数组的数组)
2022-08-16 09:55 作者:Clayton_Zhou | 我要投稿
https://codeforces.com/contest/707/problem/E
题意:
给定n行m列的棋盘,棋盘上有k个连续的灯串,每个灯串的每个灯都有一个值,开启的时候获取这个值,关闭的时候是0,每个灯串的所有灯要么一起关,要么一起开。
m个询问,switch k,调整序号为k的灯串的开关状态,ask x,y,n,m,询问以(x,y)和(n,m)为对角顶点的矩形内灯泡的权值之和。
题解:
可以用二维的树状数组来维护这个棋盘,每个树状数组维护一行,计算的时候我们只需暴力求和。
对于switch操作,不必每次都更新到树状数组上,因为switch后未必查询,
也就是说可能有switch switch ask的情况,两次swicth等于没有操作,所以我们只需要在查询的时候更新树状数组,
因此我们需要last数组维护上一次查询的时候的灯串状态,now数组维护现在的状态,查询的时候只要他们不同,再更新树状数组。