Language: C

#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <queue>
#include <map>
#define clr(a,b) memset(a,b,sizeof(a))

using namespace std;

const int N=300005;
const int M=2000000;
struct que{
    char op[2];
    int l, r;
}que[N];
int a[2*N];

map< pair<int, int> , int > ma;

struct node{
    int son[4], x1, y1, x2, y2;
    int num;
}tr[M];
int sta[M], top, tot, Max;

void init(int ro, int x1, int y1, int x2, int y2){
    tr[ro].x1=x1; tr[ro].y1=y1;
    tr[ro].x2=x2; tr[ro].y2=y2;
    tr[ro].num=0;
    memset(tr[ro].son, 0, sizeof(tr[ro].son));
    return ;
}
void insert(int ro, int x, int y){
    if(tr[ro].x1==tr[ro].x2 && tr[ro].y1==tr[ro].y2){
        if(tr[ro].x1==x && tr[ro].y1==y) tr[ro].num++;
        return ;
    }
    tr[ro].num++;
    int midx=(tr[ro].x1+tr[ro].x2)>>1;
    int midy=(tr[ro].y1+tr[ro].y2)>>1;
    if(tr[ro].x1<=x && x<=midx){
        if(tr[ro].y1<=y && y<=midy){
            if(tr[ro].son[0]==0){
                if(top){
                    init(sta[top-1], tr[ro].x1, tr[ro].y1, midx, midy);
                    tr[ro].son[0]=sta[top-1];
                    top--;
                }else{
                    init(tot, tr[ro].x1, tr[ro].y1, midx, midy);
                    tr[ro].son[0]=tot;
                    tot++;
                }
            }
            puts("AA");
            insert(tr[ro].son[0], x, y);
        }
        if(midy<y && y<=tr[ro].y2){
            if(tr[ro].son[1]==0){
                if(top){
                    init(sta[top-1], tr[ro].x1, midy+1, midx, tr[ro].y2);
                    tr[ro].son[1]=sta[top-1];
                    top--;
                }else{
                    init(tot, tr[ro].x1, midy+1, midx, tr[ro].y2);
                    tr[ro].son[1]=tot;
                    tot++;
                }
            }
            puts("BB");
            insert(tr[ro].son[1], x, y);
        }
    }else{
        if(tr[ro].y1<=y && y<=midy){
            if(tr[ro].son[3]==0){
                if(top){
                    init(sta[top-1], midx+1, tr[ro].y1, tr[ro].x2, midy);
                    tr[ro].son[3]=sta[top-1];
                    top--;
                }else{
                    init(tot, midx+1, tr[ro].y1, tr[ro].x2, midy);
                    tr[ro].son[3]=tot;
                    tot++;
                }
            }
            puts("DD");
            insert(tr[ro].son[3], x, y);
        }
        if(midy<y && y<=tr[ro].y2){
            if(tr[ro].son[2]==0){
                if(top){
                    init(sta[top-1], midx+1, midy+1, tr[ro].x2, tr[ro].y2);
                    tr[ro].son[2]=sta[top-1];
                    top--;
                }else{
                    init(tot, midx+1, midy+1, tr[ro].x2, tr[ro].y2);
                    tr[ro].son[2]=tot;
                    tot++;
                }
            }
            puts("CCC");
            insert(tr[ro].son[2], x, y);
        }
    }
}
int query(int ro, int x, int y){
    if(x<=tr[ro].x1 && y<=tr[ro].y1) return tr[ro].num;
    int ans=0;
    for(int i=0; i<4; i++)
        if(tr[ro].son[i]!=0){
            int t=tr[ro].son[i];
            if(tr[t].x2>=x && tr[t].y2>=y)
                ans+=query(t, x, y);
        }
    return ans;
}
void del(int ro, int x, int y){
    if(tr[ro].x1==tr[ro].x2 && tr[ro].y1==tr[ro].y2){
        if(tr[ro].x1==x && tr[ro].y1==y) tr[ro].num--;
        return ;
    }
    tr[ro].num--;
    for(int i=0; i<4; i++)
        if(tr[ro].son[i]!=0){
            int t=tr[ro].son[i];
            if(tr[t].x1<=x && x<=tr[t].x2 && tr[t].y1<=y && y<=tr[t].y2)
                del(t, x, y);
            if(tr[t].num==0){
                tr[ro].son[i]=0;
                sta[top++]=t;
            }
        }
}
int main(){
    int i, j;
    Max=0; i=0; j=0;
    while(scanf("%s", que[i].op)!=EOF){
        scanf("%d%d", &que[i].l, &que[i].r);
        a[j]=que[i].l;
        a[j+1]=que[i].r;
        Max=max(Max, max(a[j], a[j+1]));
        i++; j+=2;
        if(i==5) break;
    }
    sort(a, a+2*i);
    Max=lower_bound(a, a+2*i, Max)-a+1;  Max+=10;  printf("Max==%d\n", Max);
    ma.clear();
    init(1, 1, 1, Max, Max);
    top=0; tot=1;
    for(int x=0; x<i; x++){
        que[x].r=Max-que[x].r;
        if(que[x].op[0]=='+'){
            printf("%d\n", query(1, que[x].l, que[x].r));
            ma[make_pair(que[x].l, que[x].r)]=x;
            insert(1, que[x].l, que[x].r);
        }else{
            if(ma.find(make_pair(que[x].l, que[x].r))!=ma.end()){
                ma.erase(make_pair(que[x].l, que[x].r));
                del(1, que[x].l, que[x].r);
            }
        }
    }
    return 0;
}

Compiler output:
main.c:3:10: fatal error: algorithm: No such file or directory
    3 | #include <algorithm>
      |          ^~~~~~~~~~~
compilation terminated.