제출 #874469

#제출 시각아이디문제언어결과실행 시간메모리
874469josanneo22Pairs (IOI07_pairs)C++17
60 / 100
39 ms11020 KiB
/* Problem: IOI 2007 Pairs When: 2023-11-16 14:54:19 Author: Ning07 */ #include<bits/stdc++.h> using namespace std; using i64=long long; const int NN=2e5; int N,B,M,D,a[NN],x[NN],y[NN]; void solve1(){ for(int i=0;i<N;i++){ std::cin>>a[i]; } sort(a,a+N); i64 ans=0; for(int i=0;i<N;i++){ int lst=lower_bound(a,a+N,a[i]-D)-a; ans+=i-lst; } cout<<ans<<'\n'; } const int lift=2e5; i64 tr[NN<<1]; void update(int x,i64 v){ x+=lift; for(;x;x/=2){ tr[x]+=v;} } i64 get(int x,int y){ x+=lift; y+=lift; i64 res=0; while(x<=y){ if(x%2==1) res+=tr[x++]; if(y%2==0) res+=tr[y--]; x/=2; y/=2; } return res; } void solve2(){ vector<int> pos[75000*2+500]; i64 ans=0; for(int i=0;i<N;i++){ std::cin>>x[i]>>y[i]; pos[x[i]+y[i]].push_back(x[i]-y[i]+M); } for(int i=2;i<=2*M;i++){ for(auto &u:pos[i]){ ans+=get(max(0,u-D),min(2*M,u+D)); update(u,1); } if(i-D<=0) continue; for(auto &u:pos[i-D]) update(u,-1); } cout<<ans<<'\n'; } void solve3(){ } int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); std::cin>>B>>N>>D>>M; if(B==1) solve1(); else if(B==2) solve2(); else if(B==3) solve3(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...