Submission #120229

#TimeUsernameProblemLanguageResultExecution timeMemory
120229oolimryExamination (JOI19_examination)C++14
100 / 100
1002 ms35924 KiB
#include <bits/stdc++.h> using namespace std; typedef pair<int,int> ii; struct query{ int x, y, z, id; }; bool comp(query a, query b){ return a.z > b.z; } bool comp2(ii a, ii b){ return a.first + a.second > b.first + b.second; } class SegmentTree{ public: int n; vector<int> tree; void create(int nn){ n = nn; for(int i = 0;i < 2 * n + 5;i++){ tree.push_back(0); } } void update(int i){ i += n; while(i > 0){ tree[i]++; i >>= 1; } } int query(int l, int r){ int ans = 0; for(l += n,r += n;l < r;l >>= 1, r >>= 1){ if(l & 1){ ans += tree[l]; l++; } if(r & 1){ r--; ans += tree[r]; } } return ans; } }; int main() { //freopen("i.txt","r",stdin); ios_base::sync_with_stdio(false); cin.tie(0); int n, m; cin >> n >> m; map<int,int> dis; ii arr[n]; for(int i = 0;i < n;i++){ cin >> arr[i].first >> arr[i].second; dis[arr[i].first] = 0; dis[arr[i].second] = 0; } query queries[m]; for(int i = 0;i < m;i++){ int x, y, z; cin >> x >> y >> z; z = max(z, x + y); query q; q.z = z; q.y = y; q.x = x; dis[x] = 0; dis[y] = 0; q.id = i; queries[i] = q; } int cc = 0; for(map<int,int>::iterator it = dis.begin();it != dis.end();it++){ it->second = cc; cc++; } sort(queries,queries+m,comp); sort(arr,arr+n,comp2); SegmentTree x; SegmentTree y; x.create(dis.size()); y.create(dis.size()); int ans[m]; int c = 0; for(int i = 0;i < m;i++){ //cout << queries[i].z << ": "; while(true){ if(c == n) break; if(arr[c].first + arr[c].second < queries[i].z) break; //cout << arr[c].first << " " << arr[c].second << "|"; x.update(dis[arr[c].first]); y.update(dis[arr[c].second]); c++; } ans[queries[i].id] = c - x.query(0,dis[queries[i].x]) - y.query(0,dis[queries[i].y]); //cout << "\n"; } for(int i = 0;i < m;i++){ cout << ans[i] << "\n"; } 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...