牛客小白月赛18 G Forsaken的三维数点

时间:2023-03-09 16:32:50
牛客小白月赛18 G	Forsaken的三维数点

牛客小白月赛18 G	Forsaken的三维数点

思路:

这是一道树状数组和二分的题,用线段树空间直接爆,时间也会超

然后这道题我犯了一个很低级的错误,导致我wa了十发左右,一个int型变量用lld输入,然后他给的提示是运行错误,我哭了,我一直以为是是空间爆了

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define lowbit(x) x&(-x)
ll x,y,z,mx,cnt;
const int maxn = 2e5;
ll tree[maxn+]; void add(ll x,ll k){
for(ll i=x;i<=maxn;i+=lowbit(i)){
tree[i]+=k;
}
} ll query(ll x){
ll res = ;
for(ll i = x;i>;i-=lowbit(i))
res +=tree[i];
return res;
}
int main(){
int n;
cin>>n;
int op;
for(int i=;i<=n;i++){
cin>>op;
if(op==){
scanf("%lld%lld%lld",&x,&y,&z);
double d=sqrt(x*x+y*y+z*z);
ll p = ceil(d);
mx = max(mx,p);
cnt++;
add(p,);
}
else if(op==){
int k;
scanf("%d",&k);
if(k>cnt){
cout<<"-1"<<endl;
continue;
} ll l=,r = mx,mid;
while(l<=r){
mid = (l+r)>>;
if(query(mid)>=k) r =mid-;
else l = mid+;
}
cout<<l<<endl;
}
}
return ;
}