rt,今天写代码的时候有一条这样的报错信息:
Error:value of (某16进制码) is too big for field of 4 bytes at (某16进制码)
编译能运行,但是不让输入就结束了,bdfs无果
然后更离谱的是他的报错文件是一个很奇怪的文件:ccKSKlnX.s
这是我的代码,帮看一下为什么会报错:
/*
Author:Butterfly
Start Coding:2024/4/27 10:17
Finish Coding:
Finish Debugging:
*/
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=500005,Q=100005,L=20;
int n,q;
struct KDTree
{
struct KDNode
{
int x[2],sum,lc,rc,mn[2],mx[2];
#define x(i,j) kdt[i].x[j]
#define mn(i,j) kdt[i].mn[j]
#define mx(i,j) kdt[i].mx[j]
#define sum(i) kdt[i].sum
#define lc(i) kdt[i].lc
#define rc(i) kdt[i].rc
}kdt[N];
int cnt,n,rec[N],rt[L];
void del(int &u)
{
if(!u)return;
rec[++cnt]=u;
del(lc(u));
del(rc(u));
u=0;
}
void pushup(int u)
{
sum(u)=sum(lc(u))+sum(rc(u))+1;
for(int i:{0,1})
{
mn(u,i)=mx(u,i)=x(u,i);
if(lc(u))
{
mn(u,i)=min(mn(u,i),mn(lc(u),i));
mx(u,i)=max(mx(u,i),mx(lc(u),i));
}
if(rc(u))
{
mn(u,i)=min(mn(u,i),mn(rc(u),i));
mx(u,i)=max(mx(u,i),mx(rc(u),i));
}
}
}
int build(int l,int r,int d)
{
int mid=l+r>>1;
nth_element(rec+l,rec+mid,rec+r+1,[d,this](int a,int b){return x(a,d)<x(b,d);});
int rt=rec[mid];
if(l<mid)lc(rt)=build(l,mid-1,d^1);
if(r>mid)rc(rt)=build(mid+1,r,d^1);
pushup(rt);
return rt;
}
void update(int x[])
{
n++;
for(int i:{0,1,2})x(n,i)=x[i];
rec[cnt=1]=n;
for(int i=0;;i++)
{
if(rt[i])del(rt[i]);
else
{
rt[i]=build(1,cnt,0);
break;
}
}
}
int query(int u,int l[],int r[])
{
if(!u)return 0;
int f=1;
for(int i:{0,1,2})f&=(l[i]<=mn(u,i)&&mx(u,i)<=r[i]);
if(f)return sum(u);
for(int i:{0,1,2})if(mx(u,i)<l[i]||mn(u,i)>r[i])return 0;
f=1;
for(int i:{0,1,2})f&=(l[i]<=x(u,i)&&x(u,i)<=r[i]);
return query(lc(u),l,r)+query(rc(u),l,r)+f;
}
};
struct SegNode
{
int lc,rc;
KDTree dat;
#define l(i) sg[i].lc
#define r(i) sg[i].rc
}sg[Q<<5];
struct SegTree
{
int n,q[2];
void update(int &u,int l,int r,int x,int y,int p)
{
if(!u)u=++n;
q[0]=x;q[1]=y;
sg[u].dat.update(q);
if(l==r)return;
int mid=l+r>>1;
if(p<=mid)update(l(u),l,mid,x,y,p);
else update(r(u),mid+1,r,x,y,p);
}
int query(int &u,int l,int r,int L[],int R[],int k)
{
if(l==r)return l;
if(!u)u=++n;
int res=0;
if(r(u))res=sg[u].dat.query(u,L,R);
int mid=l+r>>1;
if(res<k)return query(l(u),l,mid,L,R,k-res);
return query(r(u),mid+1,r,L,R,k);
}
}T;
signed main()
{
cin>>n>>q;
for(int i=1,op,rt,a,b,c,d,e,q1[2],q2[2];i<=n;i++)
{
cin>>op>>a>>b>>c;
rt=1;
if(op==1)T.update(rt,1,n,a,b,c);
else
{
cin>>d>>e;
q1[0]=a;q1[1]=b;q2[0]=c;q2[1]=d;
cout<<T.query(rt,1,n,q1,q2,e)<<'\n';
}
}
}