Submission #1177284

#TimeUsernameProblemLanguageResultExecution timeMemory
1177284sanoPairs (IOI07_pairs)C++20
60 / 100
237 ms139192 KiB
#include<iostream> #include<vector> #include<queue> #include<deque> #include<string> #include<fstream> #include<algorithm> #include <iomanip> #include<map> #include <set> #include <unordered_map> #include <stack> #include <unordered_set> #include <cmath> #include <cstdint> #include <cassert> #define shit short int #define ll long long //#define int ll #define For(i, n) for(int i = 0; i < (int)n; i++) #define ffor(i, a, n) for(int i = (int)a; i < (int)n; i++) #define rfor(i, n) for(int i = (int)n; i >= (int)0; i--) #define rffor(i, a, n) for(int i = (int)n; i >= (int)a; i--) #define vec vector #define ff first #define ss second #define pb push_back #define pii pair<int, int> #define NEK 2000000000 #define mod 1000000007 #define mod2 1000000009 #define rsz resize #define prv1 43 #define prv2 47 #define D 8 #define trav(a,x) for (auto& a: x) #define pb push_back #define ub upper_bound #define lb lower_bound #define all(x) (x).begin(), (x).end() #define sig 0.0000001 using namespace std; class intervalac { int n; struct node { int in = 0; node* l = nullptr; node* r = nullptr; }; node* root = new node; void propagate(node* s) { if (s->l == nullptr) s->l = new node; if (s->r == nullptr) s->r = new node; return; } void zmen(node*s, int l, int r, int a, int k){ if (l > a || r < a) return; if (a <= l && r <= a) { s->in += k; return; } int m = (l + r) / 2; propagate(s); zmen(s->l, l, m, a, k); zmen(s->r, m + 1, r, a, k); s->in = s->l->in + s->r->in; return; } int daj(node* s, int l, int r, int a, int b) { if (l > b || r < a) return 0; if (a <= l && r <= b) return s->in; propagate(s); int m = (l + r) / 2; return daj(s->l, l, m, a, b) + daj(s->r, m + 1, r, a, b); } public: intervalac(int vel) { n = vel; return; } void zmen(int a, int k) { zmen(root, 0, n - 1, a, k); return; } int daj(int a, int b) { return daj(root, 0, n - 1, a, b); } }; struct udalost { int b, a1, a2, t; bool operator<(const udalost& other) const { if (b == other.b) { return t > other.t; } return b < other.b; } }; void combo2(int& a, int& b) { int a2 = (a + b), b2 = (a - b); a = a2, b = b2; return; } signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int tt; cin >> tt; if (tt == 1) { int n, d, m; cin >> n >> d >> m; vec<int> p(n); For(i, n) cin >> p[i]; intervalac seg(m + d +1); ll vys = 0; For(i, n) { seg.zmen(p[i] + d, 1); vys += (seg.daj(p[i] - d + d, p[i] + d + d) - 1); } cout << vys << '\n'; return 0; } if(tt == 2){ int n, d, m; cin >> n >> d >> m; vec<vec<int>> p(n, vec<int>(2)); vec<udalost> u; For(i, n) { int a, b; cin >> a >> b; int a1 = a + d, b1 = b, a2 = a, b2 = b + d, a3 = a - d, b3 = b, a4 = a, b4 = b - d; combo2(a, b), combo2(a1, b1), combo2(a2, b2), combo2(a3, b3), combo2(a4, b4); u.push_back({ b, a, a, 0 }); u.push_back({ b2, a3, a2, 1 }); u.push_back({ b1, a4, a1, -1 }); } sort(u.begin(), u.end()); ll vys = 0; intervalac seg(3 * m + 2 * d + 1); For(i, u.size()) { if (u[i].t == -1) { vys += seg.daj(u[i].a1 + m + d, u[i].a2 + m + d); } if (u[i].t == 0) { seg.zmen(u[i].a1 + m + d, 1); } if (u[i].t == 1) { vys -= seg.daj(u[i].a1 + m + d, u[i].a2 + m + d); } } vys -= n; cout << vys / 2 << '\n'; return 0; } if (tt == 3) { cout << 1 << '\n'; return 0; } 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...