제출 #259961

#제출 시각아이디문제언어결과실행 시간메모리
259961thecodingwizardPairs (IOI07_pairs)C++11
60 / 100
171 ms7936 KiB
#include <bits/stdc++.h> using namespace std; #include <ext/pb_ds/tree_policy.hpp> #include <ext/pb_ds/assoc_container.hpp> using namespace __gnu_pbds; template <class T> using Tree = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; #define ii pair<int, int> #define f first #define s second int b, n, d, m; struct FT { vector<int> ft; int n; void init(int _n) { n = _n; ft.assign(n, 0); } void upd(int k, int v) { while (k <= n) { ft[k] += v; k += k&-k; } } int qry(int k) { k = min(k, n-1); if (k <= 0) return 0; int sum = 0; while (k) { sum += ft[k]; k -= k&-k; } return sum; } }; int main() { cin >> b >> n >> d >> m; if (b == 1) { Tree<pair<int, int>> TS; long long ans = 0; vector<int> nums; for (int i = 0; i < n; i++) { int x; cin >> x; nums.push_back(x); } sort(nums.begin(), nums.end()); int ct = 0; for (int x : nums) { ans += ct-TS.order_of_key(make_pair(x-d, 0)); TS.insert(make_pair(x, ct++)); } cout << ans << endl; } else if (b == 2) { vector<ii> nums; for (int i = 0; i < n; i++) { int x, y; cin >> x >> y; nums.push_back(make_pair(x-y, x+y)); } sort(nums.begin(), nums.end()); int l = 0; FT ft; ft.init(2*m+1); long long ans = 0; for (int r = 0; r < n; r++) { while (nums[r].f - nums[l].f > d) { ft.upd(nums[l].s, -1); l++; } ans += ft.qry(nums[r].s+d) - ft.qry(nums[r].s-d-1); ft.upd(nums[r].s, 1); } cout << ans << endl; } else { } 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...