求ans时的部分中y1被编译成了double
#include<bits/stdc++.h>
#define ls l, (l+r)>>1, num<<1
#define rs ((l+r)>>1)+1, r, num<<1|1
using namespace std;
typedef long long ll;
const int N = 1e5+10;
int a[N], b[N];
int n, m, q;
int op, x, y;
int x1, y1, x2, y2;
ll ans;
void update(int *a, int num){
a[num] = a[num<<1]+a[num<<1|1];
}
void change(int *a, int p, int l, int r, int num){
if(l == r){
a[num] ^= 1;
return;
}
int mid = (l+r)>>1;
if(p<=mid) change(a, p, ls);
else change(a, p, rs);
update(a, num);
}
int tre(int *a, int al, int ar, int l, int r, int num){
if(al <= l && r <= ar) return a[num];
int mid = (l+r)>>1, ans = 0;
if(al <= mid) ans += tre(a, al, ar, ls);
if(mid < ar) ans += tre(a, al, ar, rs);
return ans;
}
int main(){
cin>>n>>m>>q;
while(q--){
cin>>op;
if(op == 1){
cin>>x>>y;
change(a, x, 1, n, 1);
change(b, y, 1, m, 1);
} else {
cin>>x1>>y1;
cin>>x2>>y2;
ll xx = tre(a, x1, x2, 1, n, 1);
ll yy = tre(b, y1, y2, 1, m, 1);
ans = xx*(ll)(y2-y1+1) + yy*(ll)(x2-x1+1) - (ll)(xx*yy<<1);
cout<<ans<<endl;
}
}
return 0;
}