제출 #747641

#제출 시각아이디문제언어결과실행 시간메모리
747641TahirAliyevExamination (JOI19_examination)C++17
41 / 100
3072 ms203396 KiB
#include <bits/stdc++.h> #pragma GCC optimize("O3") using namespace std; #define ll long long int #define oo 1e9 #define pii pair<int, int> const int MAX = 1e5 + 5; const int LOGMAX = 30; const int treeSize = MAX * LOGMAX * LOGMAX; int tree[treeSize]; int L[treeSize], R[treeSize]; int n, m; int nxt = MAX * 4; void update1d(int node, int l, int r, int pos, int val){ tree[node] += val; if(l == r) return; int mid = (l + r) / 2; if(pos <= mid){ if(!L[node]) L[node] = ++nxt; update1d(L[node], l, mid ,pos, val); } else{ if(!R[node]) R[node] = ++nxt; update1d(R[node], mid + 1, r ,pos, val); } } int ask1d(int node, int l, int r, int ql, int qr){ if(node == 0) return 0; if(r < ql || qr < l) return 0; if(ql <= l && r <= qr) return tree[node]; int mid = (l + r) / 2; return ask1d(L[node], l, mid, ql, qr) + ask1d(R[node], mid + 1, r, ql, qr); } void update2d(int node, int l, int r, int posx, int posy, int val){ update1d(node, 0, n, posx, val); if(l == r) return; int mid = (l + r) / 2; if(posy <= mid){ update2d(2 * node, l, mid, posx, posy, val); } else{ update2d(2 * node + 1, mid + 1, r, posx, posy, val); } } int ask2d(int node, int l, int r, int x1, int x2, int y1, int y2){ if(r < y1 || y2 < l) return 0; if(y1 <= l && r <= y2) return ask1d(node, 0, n, x1, x2); int mid = (l + r) / 2; return ask2d(2 * node, l, mid, x1, x2, y1, y2) + ask2d(2 * node + 1, mid + 1, r, x1, x2, y1, y2); } bool comp(array<int, 4> a, array<int, 4> b){ return (a[2] < b[2]); } bool comp2(pii a, pii b){ return a.first + a.second < b.first + b.second; } pii arr[MAX]; vector<int> v1, v2; vector<array<int, 4>> q; void INPUT(){ cin >> n >> m; for (int i = 0; i < n; i++) { scanf("%d%d", &arr[i].first, &arr[i].second); v1.push_back(arr[i].first); v2.push_back(arr[i].second); } sort(arr, arr + n, comp2); sort(v1.begin(), v1.end()); sort(v2.begin(), v2.end()); for (int i = 0; i < m; i++) { int a, b, c; scanf("%d%d%d", &a, &b, &c); q.push_back({a, b, c, i}); } sort(q.begin(), q.end(), comp); } int main(){ INPUT(); for (int i = 0; i < n; i++) { int a = lower_bound(v1.begin(), v1.end(), arr[i].first) - v1.begin(); int b = lower_bound(v2.begin(), v2.end(), arr[i].second) - v2.begin(); update2d(1, 0, n, a, b, 1); } int p = 0; int ans[m]; for(array<int, 4>& t : q){ int X = lower_bound(v1.begin(), v1.end(), t[0]) - v1.begin(); int Y = lower_bound(v2.begin(), v2.end(), t[1]) - v2.begin(); while(t[2] > arr[p].first + arr[p].second){ int a = lower_bound(v1.begin(), v1.end(), arr[p].first) - v1.begin(); int b = lower_bound(v2.begin(), v2.end(), arr[p].second) - v2.begin(); update2d(1, 0, n, a, b, -1); p++; } ans[t[3]] = ask2d(1, 0, n, X, n, Y, n); } for(int a: ans){ cout << a << '\n'; } }

컴파일 시 표준 에러 (stderr) 메시지

examination.cpp: In function 'void INPUT()':
examination.cpp:79:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   79 |         scanf("%d%d", &arr[i].first, &arr[i].second);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
examination.cpp:88:27: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   88 |         int a, b, c; scanf("%d%d%d", &a, &b, &c);
      |                      ~~~~~^~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...