#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define vec vector
#define PB push_back
#define all(x) x.begin(), x.end()
#define F first
#define S second
#define ull unsigned long long
#define pii pair<int,int>
#define rz resize
#define ld long double
#define yes cout << "YES\n"
#define no cout << "NO\n"
#define matrix vec<vec<int>>
#define MP make_pair
const int N = 1e5+5;
const ll INF = 1e18;
const ll mod = 998244353;
mt19937_64 rng(time(0));
int random(int a, int b){ return uniform_int_distribution<ll>(a,b)(rng); }
int add(int a, int b) { a+=b;if(a>=mod)a-=mod; return a; }
struct Fen
{
vec<int>f;
int n;
void assign(int _n){
n=_n;f.rz(n+1);
}
void upd(int x, int v){ for(;x<=n;x+=x&-x)f[x]+=v; }
void upd(int l, int r, int x){ upd(l,x);upd(r+1,-x); }
int quer(int x){ int r=0;for(;x>0;x-=x&-x)r+=f[x];return r; }
};
ll B,n,d,M;
namespace D2 {
void solve() {
vec<pair<ll,ll>>a(n+1);
vec<ll>st(n+1);
vec<ll>vals;
for(int i=1;i<=n;++i)
cin>>a[i].F>>a[i].S,vals.PB(a[i].F-a[i].S),
vals.PB(a[i].F-a[i].S-d),vals.PB(a[i].F-a[i].S+d),st[i]=a[i].F+a[i].S;
sort(a.begin()+1,a.end(),[&](const pair<ll,ll>& fi, const pair<ll,ll>& se){
return (fi.F+fi.S == se.F+se.S ? fi.F-fi.S < se.F-se.S : fi.F+fi.S < se.F+se.S);
});
sort(all(vals));
vals.erase(unique(all(vals)), vals.end());
sort(st.begin()+1,st.end());
auto getid=[&](ll x)->int{
return lower_bound(all(vals),x)-vals.begin()+1;
};
Fen f;f.assign(vals.size()+2);
ll an=0;
for(int i=1,j=1;i<=n;++i){
while(j < i && st[i]-st[j] > d){
ll u=a[j].F-a[j].S;
int cl=getid(u-d),cr=getid(u+d);
f.upd(cl,cr,-1);++j;
}
ll v=a[i].F-a[i].S;
int cl=getid(v-d),cr=getid(v+d);
an+=f.quer(getid(v));
f.upd(cl,cr,1);
}
cout<<an;
}
}
const int SZ = 305;
const int OFF = 155;
int bit3d[SZ][SZ][SZ];
void raw_upd(int x, int y, int z, int v) {
for(int i=x; i<SZ; i+=i&-i)
for(int j=y; j<SZ; j+=j&-j)
for(int k=z; k<SZ; k+=k&-k)
bit3d[i][j][k] += v;
}
int raw_quer(int x, int y, int z) {
int r=0; x=min(x,SZ-1); y=min(y,SZ-1); z=min(z,SZ-1);
for(int i=x; i>0; i-=i&-i)
for(int j=y; j>0; j-=j&-j)
for(int k=z; k>0; k-=k&-k)
r += bit3d[i][j][k];
return r;
}
namespace D3 {
void upd_range(int x1, int x2, int y1, int y2, int z1, int z2, int v){
x1=max(1,x1); x2=min(SZ-1,x2);
y1=max(1,y1); y2=min(SZ-1,y2);
z1=max(1,z1); z2=min(SZ-1,z2);
if(x1>x2||y1>y2||z1>z2) return;
raw_upd(x1,y1,z1,v);
raw_upd(x1,y1,z2+1,-v);
raw_upd(x1,y2+1,z1,-v);
raw_upd(x1,y2+1,z2+1,v);
raw_upd(x2+1,y1,z1,-v);
raw_upd(x2+1,y1,z2+1,v);
raw_upd(x2+1,y2+1,z1,v);
raw_upd(x2+1,y2+1,z2+1,-v);
}
void solve(){
vec<array<int,3>>ar(n+1);
for(int i=1;i<=n;++i)
for(int j=0;j<B;++j)cin>>ar[i][j];
sort(ar.begin()+1,ar.end(),[&](array<int,3>& fi, array<int,3>& se){
return fi[0]+fi[1]+fi[2] < se[0]+se[1]+se[2];
});
ll an=0;
for(int i=1,j=1;i<=n;++i){
while(j < i){
int u1=ar[i][0]+ar[i][1]+ar[i][2];
int u2=ar[j][0]+ar[j][1]+ar[j][2];
if(u1-u2 > d){
int v1=ar[j][0]+ar[j][1]-ar[j][2]+OFF;
int v2=ar[j][0]-ar[j][1]-ar[j][2]+OFF;
int v3=ar[j][0]-ar[j][1]+ar[j][2]+OFF;
upd_range(v1-d,v1+d,v2-d,v2+d,v3-d,v3+d,-1);
++j;
} else break;
}
int v1=ar[i][0]+ar[i][1]-ar[i][2]+OFF;
int v2=ar[i][0]-ar[i][1]-ar[i][2]+OFF;
int v3=ar[i][0]-ar[i][1]+ar[i][2]+OFF;
an += raw_quer(v1,v2,v3);
upd_range(v1-d,v1+d,v2-d,v2+d,v3-d,v3+d,1);
}
cout<<an;
}
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cin>>B>>n>>d>>M;
if(B==1){
vec<ll>a(n+1);
for(int i=1;i<=n;++i)cin>>a[i];
sort(a.begin()+1,a.end());
ll j=1,an=0;
for(int i=1;i<=n;++i){
while(a[i]-a[j] > d)++j;
an += (i-j);
}
cout<<an<<'\n';
} else if(B==2){
D2::solve();
} else {
D3::solve();
}
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |