Submission #396303

#TimeUsernameProblemLanguageResultExecution timeMemory
396303SortingPairs (IOI07_pairs)C++17
70 / 100
4075 ms6312 KiB
#include <bits/stdc++.h> #pragma GCC optimize("O3") using namespace std; typedef long long ll; constexpr int N = 1e5 + 3; constexpr int M[3] = {(int)(75e6 + 3), (int)(75e3 + 3), 75}; int b, n, d, m; vector<int> a[N]; ll ans = 0; struct Fenwick{ int a[2 * M[1]]; Fenwick(){} void update(int idx, int val){ for(; idx < 2 * M[1]; idx += idx&-idx) a[idx] += val; } int query(int idx){ int ret = 0; for(; idx >= 1; idx -= idx&-idx) ret += a[idx]; return ret; } int query(int l, int r){ return query(r) - query(l - 1); } } f; void solve_3(){ for(int i = 0; i < n; ++i) for(int j = i + 1; j < n; ++j){ int dist = 0; for(int k = 0; k < 3; ++k) dist += abs(a[i][k] - a[j][k]); if(dist <= d) ++ans; } } void solve_2(){ for(int i = 0; i < n; ++i){ int x = a[i][0], y = a[i][1]; a[i][0] = x - y; a[i][1] = x + y; } sort(a, a + n); int l_ptr = 0, r_ptr = -1; for(int i = 0; i < n; ++i){ while(a[l_ptr][0] < a[i][0] - d){ f.update(a[l_ptr][1], -1); ++l_ptr; } while(r_ptr != n - 1 && a[r_ptr + 1][0] <= a[i][0] + d){ ++r_ptr; f.update(a[r_ptr][1], 1); } ans += f.query(max(a[i][1] - d, 1), min(a[i][1] + d, 2 * M[1] - 1)) - 1; } ans >>= 1; } void solve_1(){ sort(a, a + n); int j = 0; for(int i = 0; i < n; ++i){ while(j != n && a[j][0] <= a[i][0] + d) ++j; ans += j - i - 1; } } int main(){ ios::sync_with_stdio(false); cin.tie(NULL); cin >> b >> n >> d >> m; for(int i = 0; i < n; ++i){ a[i].resize(b); for(int j = 0; j < b; ++j) cin >> a[i][j]; } if(b == 1) solve_1(); else if(b == 2) solve_2(); else solve_3(); cout << ans << "\n"; }
#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...