P3801 样例过了全WA玄关求调 马蜂良好
  • 板块题目总版
  • 楼主Const_AKer
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/3 19:37
  • 上次更新2024/10/3 21:19:11
查看原帖
P3801 样例过了全WA玄关求调 马蜂良好
1038686
Const_AKer楼主2024/10/3 19:37

代码大概是想拿线段树维护下区间异或修改和区间求和

#include<bits/stdc++.h>
#define ls (p<<1)
#define rs ((p<<1)+1)
#define mid ((l+r)>>1)
#define int long long
using namespace std;
const int N=100005;
int n,m,q,op,x,y,xl,yl,xr,yr,ans,sx,sy;
struct sqt
{
	int s[N*4];
	bool t[N*4];
	void pushup(int p)
	{
		s[p]=s[ls]+s[rs];
	}
	void addtag(int p,int l,int r)
	{
		s[p]=(r-l+1)-s[p];
		t[p]^=1;
	}
	void pushdown(int p,int l,int r)
	{
		if(t[p])
		{
			addtag(ls,l,mid);
			addtag(rs,mid+1,r);
			t[p]=0;
		}
	}
	void add(int p,int l,int r,int now)
	{
		if(now<l||r<now) return;
		if(l==now&&now==r) return addtag(p,l,r);
		pushdown(p,l,r);
		add(ls,l,mid,now);
		add(rs,mid+1,r,now);
		pushup(p);
	}
	int ask(int p,int l,int r,int L,int R)
	{
		if(r<L||R<l) return 0;
		if(L<=l&&r<=R) return s[p];
		pushdown(p,l,r);
		return ask(ls,l,mid,L,R)+ask(rs,mid+1,r,L,R);
	}
}a,b;
signed main()
{
	ios::sync_with_stdio(0);cin.tie(nullptr);cout.tie(nullptr);
	cin>>n>>m>>q;
	while(q--)
	{
		cin>>op;
		if(op==1)
		{
			cin>>x>>y;
			a.add(1,1,n,x);
			b.add(1,1,m,y);
		}
		if(op==2)
		{
			cin>>xl>>yl>>xr>>yr;
			sx=a.ask(1,1,n,xl,xr);
			sy=b.ask(1,1,m,yl,yr);
			ans=sx*m+sy*n-2*sx*sy;
			cout<<ans<<'\n';
		}
	}
	return 0;
}
2024/10/3 19:37
加载中...