求调,只有int和long long但是编译出来double
查看原帖
求调,只有int和long long但是编译出来double
867573
EEqualIPie楼主2024/10/17 18:04

求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;
}
2024/10/17 18:04
加载中...