正解算法为什么过不了
查看原帖
正解算法为什么过不了
482730
aSunnyDay楼主2022/1/25 17:48

求助

#include<bits/stdc++.h>
#define N 309
#define C 109
using namespace std;
typedef int ll;
ll n,m,q,matrix[N][N],d[N][N][C];
ll LSB(ll x){return x&(-x);}
void add(ll x,ll y,ll v,ll z){
	while(y<=N) d[x][y][v]+=z,y+=LSB(y);
}
ll query(ll s,ll x,ll y,ll z){
	ll sum=0;
	for(ll i=s;i<=x;++i){
		ll r=y;
		while(r) sum+=d[i][r][z],r-=LSB(r);
	}
	return sum;
}
ll read(){
	char c;
	ll x=0,d=1;
	while(c<'0'||c>'9'){c=getchar();if(c=='-') d=-1;}
	while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-'0',c=getchar();
	return x*d;
}
int main(){
	n=read(),m=read();
	for(ll i=1;i<=n;++i)
		for(ll j=1;j<=m;++j){
			matrix[i][j]=read();
			add(i,j,matrix[i][j],1);
		}
	q=read();
	for(ll i=1;i<=q;++i){
		ll type,a,b,c,x,y;
		type=read();
		if(type==1) a=read(),b=read(),c=read(),add(a,b,c,1),add(a,b,matrix[a][b],-1),matrix[a][b]=c;
		else a=read(),x=read(),b=read(),y=read(),c=read(),printf("%lld\n",query(a,x,y,c)-query(a,x,b-1,c));
	}
	return 0;
}
2022/1/25 17:48
加载中...