求调(马蜂正常)
查看原帖
求调(马蜂正常)
764616
TheIceStar楼主2024/1/5 13:03
#include <bits/stdc++.h>
#define ll long long
#define L(i,a,b) for (int i=(a); i<=(b); i++)
#define R(i,a,b) for (int i=(a); i>=(b); i--)
#define INF 0x3f3f3f3f
#define pb push_back
#define MN 305
//#define P 998244353
//#define x first
//#define y second
using namespace std;
int re() {
    int x=0,f=1;
    char ch=getchar();
    while(!isdigit(ch)) {
        if(ch=='-') f=-1;
        ch=getchar();
	}
    while(isdigit(ch)) x=x*10+ch-'0',ch=getchar();
    return x*f;
}
void wr(int x) {
    if(x<0) putchar('-'),x=-x;
    if(x>9) wr(x/10);
    putchar(x%10+'0');
}
int N,M,Q,mx[MN][MN],bit[MN][MN][MN];
void add(int x,int y,int k,int c) {
	for (int i=x; i<=N; i+=i&-i) 
		for (int j=y; j<=M; j+=j&-j) bit[i][j][c]+=k;
}
int get(int x,int y,int c) {
	int res=0;
	for (int i=x; i; i-=i&-i) 
		for (int j=y; j; j-=j&-j) 
			res+=bit[x][y][c];
	return res;
}
int main() {
	N=re(),M=re();
	L(i,1,N) L(j,1,M) {
		mx[i][j]=re();
		add(i,j,1,mx[i][j]);
	}
	Q=re();
	while (Q--) {
		int o,x1,y1,x2,y2,c;
		o=re();
		if (o==1) {
			x1=re(),y1=re(),c=re();
			add(x1,y1,-1,mx[x1][y1]);
			add(x1,y1,1,c);
			mx[x1][y1]=c;
		} else {
			x1=re(),x2=re(),y1=re(),y2=re(),c=re();
			wr(get(x2,y2,c)-get(x1-1,y2,c)-get(x2,y1-1,c)+get(x1-1,y1-1,c));
			putchar('\n');
		}
	}
	return 0;
}

2024/1/5 13:03
加载中...