树状数组WA求助
查看原帖
树状数组WA求助
251723
Schwarzkopf_Henkal楼主2020/10/13 17:02

刚刚把一个非常明显的sb错误改掉了,但是莫名其妙被卡70分,还全部都是几十几千行时候挂掉了。

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,t1,t2,x[500005],y[500005],tx[500005],ty[500005];
int ans[500005][2],c[500005];
vector<int>h[500005];
struct node{
    int tar,lv,rv,pos;
};
vector<node>q[500005];
void add(int x,int v){
    while(x<=t2){
        c[x]+=v;
        x+=x&-x;
    }
}
int sum(int x){
    int res=0;
    while(x){
        res+=c[x];
        x-=x&-x;
    }
    return res;
}
signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>x[i]>>y[i];
        tx[i]=x[i];
        ty[i]=y[i];
    }
    sort(tx+1,tx+n+1);
    sort(ty+1,ty+n+1);
    t1=unique(tx+1,tx+n+1)-tx;
    t2=unique(ty+1,ty+n+1)-ty;
    // cout<<t1<<" "<<t2<<" "<<mp1[0]<<endl;
    for(int i=1;i<=n;i++){
        x[i]=lower_bound(tx+1,tx+t1+1,x[i])-tx;
        y[i]=lower_bound(ty+1,ty+t2+1,y[i])-ty;
        h[x[i]].push_back(y[i]);
    }
    for(int i=1;i<=m;i++){
        int a,b,c,d,cxk,dxk;
        cin>>a>>b>>c>>d;
        a=lower_bound(tx+1,tx+t1+1,a)-tx;
        b=lower_bound(ty+1,ty+t2+1,b)-ty;
        cxk=lower_bound(tx+1,tx+t1+1,c)-tx;
        if(tx[cxk]==c)
            c=cxk;
        else c=cxk-1;
        dxk=lower_bound(ty+1,ty+t2+1,d)-ty;
        if(ty[dxk]==d)
            d=dxk;
        else d=dxk-1;
        q[a-1].push_back((node){i,b-1,d,0});
        q[c].push_back((node){i,b-1,d,1});
    }
    for(int i=1;i<=t1+1;i++){
        for(int j=0;j<h[i].size();j++)
            add(h[i][j],1);
        for(int j=0;j<q[i].size();j++)
            ans[q[i][j].tar][q[i][j].pos]=sum(q[i][j].rv)-sum(q[i][j].lv);
    }
    // cout<<sum()<<endl;
    for(int i=1;i<=m;i++)
        cout<<ans[i][1]-ans[i][0]<<'\n';
}
2020/10/13 17:02
加载中...