Submission #259506

#TimeUsernameProblemLanguageResultExecution timeMemory
259506ChrisTExamination (JOI19_examination)C++17
0 / 100
320 ms41820 KiB
#include <bits/stdc++.h> using namespace std; const int MN = 2e5 + 5; int ans[MN], bit[MN]; vector<int> xs; void getx (int &x) {x = lower_bound(xs.begin(),xs.end(),x) - xs.begin() + 1;} void inc (int i) { for (i=MN-i;i<MN;i+=i&-i) ++bit[i]; } void dec (int i) { for (i=MN-i;i<MN;i+=i&-i) --bit[i]; } int query (int i) { int ret = 0; for (i=MN-i;i;i^=i&-i) ret += bit[i]; return ret; } struct Event { int x,y,z,id; }; void cdq (int l, int r, vector<Event> &events) { //over z if (events.empty()) return; vector<Event> lq,rq; int mid = (l + r) / 2; for (Event &e : events) { if (e.z > mid) { rq.push_back(e); if (e.id<0) inc(e.y); } else { lq.push_back(e); if (e.id>0) ans[e.id] += query(e.y); } } for (Event &e : rq) if (e.id<0) dec(e.y); if (l < r) { cdq(l,mid,lq); cdq(mid+1,r,rq); } } int main () { int n,q; scanf ("%d %d",&n,&q); vector<Event> events; for (int i = 1; i <= n; i++) { int s,t; scanf ("%d %d",&s,&t); xs.push_back(t); events.push_back({s,t,s+t,-i}); } for (int i = 1; i <= q; i++) { int x,y,z; scanf ("%d %d %d",&x,&y,&z); xs.push_back(y); events.push_back({x,y,z,i}); } sort(xs.begin(),xs.end()); xs.erase(unique(xs.begin(),xs.end()),xs.end()); for (auto &au : events) getx(au.y); xs.clear(); for (auto &au : events) xs.push_back(au.z); sort(xs.begin(),xs.end()); xs.erase(unique(xs.begin(),xs.end()),xs.end()); for (auto &au : events) getx(au.z); sort(events.begin(),events.end(),[](const Event &a, const Event &b) {return a.x > b.x || (a.x == b.x && a.id < b.id);}); cdq(1,xs.size(),events); for (int i = 1; i <= q; i++) printf ("%d\n",ans[i]); return 0; }

Compilation message (stderr)

examination.cpp: In function 'int main()':
examination.cpp:42:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf ("%d %d",&n,&q);
  ~~~~~~^~~~~~~~~~~~~~~
examination.cpp:46:9: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf ("%d %d",&s,&t); xs.push_back(t);
   ~~~~~~^~~~~~~~~~~~~~~
examination.cpp:51:9: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf ("%d %d %d",&x,&y,&z); xs.push_back(y);
   ~~~~~~^~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...