P3801 红色的幻想乡在线求助
  • 板块学术版
  • 楼主hulunan
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/29 20:17
  • 上次更新2024/8/29 23:21:25
查看原帖
P3801 红色的幻想乡在线求助
705466
hulunan楼主2024/8/29 20:17
#include<bits/stdc++.h>

#define int long long

using namespace std;

int n[2],q,d[200020][2];
int lb(int x){return x&-x;}
void add(int x,int t,int k){for(int i=x;i<=n[t];i+=lb(i))d[i][t]+=k;}
int ask(int x,int t){
	int ans=0;
	for(int i=x;i>=1;i-=lb(i))ans+=d[i][t];
	return ans;
}

signed main(){
	
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	
	cin>>n[0]>>n[1]>>q;
	while(q--){
		int mod;
		cin>>mod;
		if(mod==1){
			int x,y,k;
			cin>>x>>y;
			if(d[x][0]==1)k=-1;
			else k=1;
			add(x,0,k);
			d[x][0]^=1;
			if(d[y][1]==1)k=-1;
			else k=1;
			add(y,1,k);
			d[y][1]^=1;
		}else{
			int x,y,xx,yy;
			cin>>x>>y>>xx>>yy;
			x--,y--;
			cout<<(ask(yy,1)-ask(y,1))<<" "<<(ask(xx,0)-ask(x,0))<<endl;
			cout<<(xx-x)*(ask(yy,1)-ask(y,1))+(yy-y)*(ask(xx,0)-ask(x,0))-2*(ask(yy,1)-ask(y,1))*(ask(xx,0)-ask(x,0))<<"\n";
		}
	}
	
	return 0;
}
2024/8/29 20:17
加载中...