제출 #988414

#제출 시각아이디문제언어결과실행 시간메모리
988414huutuanPairs (IOI07_pairs)C++14
100 / 100
89 ms10324 KiB
#include<bits/stdc++.h> using namespace std; #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; template<class T> using ordered_set=tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; #define int long long const int N=1e5+10; int b, n, d, m; namespace sub1{ int a[N]; void solve(){ for (int i=1; i<=n; ++i) cin >> a[i]; sort(a+1, a+n+1); int ans=0; for (int i=1, j=1; i<=n; ++i){ while (a[i]-a[j]>d) ++j; ans+=i-j; } cout << ans << '\n'; } } const int inf=1e9; namespace sub2{ pair<int, int> a[N]; void solve(){ for (int i=1; i<=n; ++i){ int x, y; cin >> x >> y; a[i]={x+y, x-y}; } sort(a+1, a+n+1); int ans=0; ordered_set<pair<int, int>> st; for (int i=1, j=1; i<=n; ++i){ while (a[i].first-a[j].first>d){ st.erase({a[j].second, j}); ++j; } ans+=st.order_of_key({a[i].second+d+1, -inf})-st.order_of_key({a[i].second-d, -inf}); st.insert({a[i].second, i}); } cout << ans << '\n'; } } namespace sub3{ vector<pair<int, int>> a[N]; int pfsum[151][151]; void prefix_sum(){ for (int i=1; i<=150; ++i) for (int j=1; j<=150; ++j) pfsum[i][j]+=pfsum[i-1][j]+pfsum[i][j-1]-pfsum[i-1][j-1]; } int get(int x, int y, int z, int t){ x=max(x, 1ll); y=max(y, 1ll); z=min(z, 150ll); t=min(t, 150ll); return pfsum[z][t]-pfsum[z][y-1]-pfsum[x-1][t]+pfsum[x-1][y-1]; } void solve(){ for (int i=1; i<=n; ++i){ int x, y, z; cin >> x >> y >> z; a[x].emplace_back(y+z, y-z+75); } for (int i=1; i<=75; ++i) sort(a[i].begin(), a[i].end()); int ans=0; for (int i=1; i<=75; ++i){ memset(pfsum, 0, sizeof pfsum); for (auto &k:a[i]) ++pfsum[k.first][k.second]; prefix_sum(); for (int j=i; j<=75; ++j) if (j-i<=d){ int dd=d-(j-i); int cur=0; for (auto &k:a[j]){ cur+=get(k.first-dd, k.second-dd, k.first+dd, k.second+dd); } if (i==j) cur-=a[i].size(), cur/=2; ans+=cur; } } cout << ans << '\n'; } } int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); cin >> b >> n >> d >> m; if (b==1){ sub1::solve(); } if (b==2){ sub2::solve(); } if (b==3){ sub3::solve(); } return 0; }
#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...