제출 #131860

#제출 시각아이디문제언어결과실행 시간메모리
131860tutisExamination (JOI19_examination)C++17
2 / 100
3051 ms24216 KiB
/*input 5 4 35 100 70 70 45 15 80 40 20 95 20 50 120 10 10 100 60 60 80 0 100 100 */ #pragma GCC optimize ("O3") #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; struct query { int i; int a[3]; }; vector<int>A[202020]; void add(int x, int y) { while (x < 202020) { A[x].push_back(y); x += x & (-x); } } int get(int x, int y) { x = min(x, 202019); int ans = 0; while (x > 0) { for (int i : A[x]) { if (i >= y) ans++; } x -= (x & (-x)); } return ans; } int main() { ios_base::sync_with_stdio(false); int n, q; cin >> n >> q; vector<int>a[n]; map<int, int>M; for (int i = 0; i < n; i++) { int s, t; cin >> s >> t; M[t + 2] = -1; a[i] = {s, t, s + t}; } sort(a, a + n, [&](vector<int>x, vector<int>y) {return x[0] > y[0];}); query Q[q]; for (int i = 0; i < q; i++) { Q[i].i = i; cin >> Q[i].a[0] >> Q[i].a[1] >> Q[i].a[2]; M[Q[i].a[1] + 1] = -1; } sort(Q, Q + q, [&](query a, query b) {return a.a[0] > b.a[0];}); int timer = 1; for (auto &i : M) { i.second = timer++; } int i = 0; int ans[q]; for (query x : Q) { while (i < n && a[i][0] >= x.a[0]) { add(M[a[i][1] + 2], a[i][2]); i++; } ans[x.i] = get(1e6, x.a[2]) - get(M[x.a[1] + 1], x.a[2]); } for (int i = 0; i < q; i++) cout << ans[i] << "\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...