Submission #1272378

#TimeUsernameProblemLanguageResultExecution timeMemory
1272378sasdeExamination (JOI19_examination)C++20
100 / 100
851 ms78808 KiB
#include<bits/stdc++.h> using namespace std; bool M1; #define PI 3.14159265358979323846 #define sz(a) (int)a.size() #define all(x) x.begin(),x.end() #define ii pair<int,int> #define iii pair<int,ii> #define iv pair<ii,ii> #define se second #define fi first #define ffi fi.fi #define sfi se.fi #define sse se.se #define fse fi.se #define lt(i, c, d) for(int i = c; i <= d; ++i) #define fl(i, c, d) for(int i = d; i >= c; --i) #define pb push_back #define emb emplace_back #define emf emplace_front #define em emplace #define look_memory cerr<<abs(&M2-&M1)/1024.0/1024<<'\n' #define look_time cerr << "TIME : " << clock() * 0.001 << "s" <<'\n' const int N=1e5+5,lg=30,mod=1e9+7; int node,query,ans[N]; ii a[N]; struct pt { int a,b,c,i; }b[N]; struct BIT2D{ int n; vector<vector<int>>bit,node; BIT2D(){}; BIT2D(int _n):n(_n),bit(n+5),node(n+5){}; void fakeupdate(int u,int v){ for(;u<=n;u+=u&-u){ node[u].pb(v); } } void fakeget(int u,int v){ for(;u>0;u-=u&-u){ node[u].pb(v); } } void fakequery(int x, int y, int u, int v){ fakeget(u,v); fakeget(x-1,v); fakeget(u,y-1); fakeget(x-1,y-1); } void fakeupdaterange(int x, int y, int u, int v){ fakeupdate(u+1,v+1); fakeupdate(x,v+1); fakeupdate(u+1,y); fakeupdate(x,y); } void start(){ for(int i=1;i<=n;++i){ sort(all(node[i])); node[i].erase(unique(all(node[i])),node[i].end()); bit[i].assign(node[i].size()+5,0); } } void update(int u,int v,int val){ while(u<=n){ for(int i=lower_bound(all(node[u]),v)-node[u].begin()+1;i<=node[u].size();i+=i&(-i)) bit[u][i-1]+=val; // cout <<u<<" "<<v<<" "<<lower_bound(all(node[u]),v)-node[u].begin()+1<<" "<<node[u].size()<<" "<<bit[u].size()<<'\n';; u+=u&(-u); } } int get(int u,int v){ int res=0; while(u>0){ for(int i=lower_bound(all(node[u]),v)-node[u].begin()+1;i>0;i-=i&(-i)) res+=bit[u][i-1]; u-=u&(-u); } return res; } void updaterange(int x,int y,int u,int v,int val){ update(u+1,v+1,val); update(x,v+1,-val); update(u+1,y,-val); update(x,y,val); } int query(int x, int y, int u, int v){ return get(u, v) - get(x-1, v) - get(u,y-1) + get(x-1,y-1); } } tree; vector<int>nen; int ne(int u){ return lower_bound(all(nen),u)-nen.begin()+1; } bool M2; void solve(){ cin >> node >> query; for(int i=1;i<=node;++i){ cin >> a[i].fi >> a[i].se; nen.emb(a[i].se); nen.emb(a[i].fi+a[i].se); } // tree =BIT2D(node); sort(a+1,a+1+node,greater<ii>()); for(int i=1;i<=query;++i){ cin >> b[i].a >> b[i].b >> b[i].c; b[i].i=i; nen.emb(b[i].b); nen.emb(b[i].c); } sort(b+1,b+1+query,[&](const pt &x,const pt &y){ return x.a>y.a; }); sort(all(nen)); nen.erase(unique(all(nen)),nen.end()); int n=sz(nen); tree =BIT2D(n); for(int i=1;i<=node;++i){ int u=ne(a[i].se); int v=ne(a[i].se+a[i].fi); tree.fakeupdate(u,v); } for(int i=1;i<=query;++i){ int u=ne(b[i].b); int v=ne(b[i].c); tree.fakequery(u,v,n,n); } tree.start(); for(int i=1,j=1;i<=query;++i){ while(j<=node&&b[i].a<=a[j].fi){ int u=ne(a[j].se); int v=ne(a[j].se+a[j].fi); tree.update(u,v,1); ++j; } int u=ne(b[i].b); int v=ne(b[i].c); ans[b[i].i]=tree.query(u,v,n,n); } for(int i=1;i<=query;++i)cout << ans[i]<<'\n'; } main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); #define task "aws" if(fopen(task".inp","r")){ freopen(task".inp","r",stdin); freopen(task".out","w",stdout); } int t=1; // cin >> t; while(t--){ solve();cout<<'\n'; } look_memory; look_time; }

Compilation message (stderr)

examination.cpp:146:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
  146 | main()
      | ^~~~
examination.cpp: In function 'int main()':
examination.cpp:153:14: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  153 |       freopen(task".inp","r",stdin);
      |       ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
examination.cpp:154:14: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  154 |       freopen(task".out","w",stdout);
      |       ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...