Submission #157285

#TimeUsernameProblemLanguageResultExecution timeMemory
157285combi1k1Examination (JOI19_examination)C++14
100 / 100
553 ms26116 KiB
#include<bits/stdc++.h> using namespace std; #define X first #define Y second #define pb push_back #define sz(x) x.size() #define all(x) x.begin(),x.end() const int N = 1e5 + 10; namespace BIT2D { vector<int> val[N]; vector<int> bit[N]; void init() { for(int i = 1 ; i < N ; ++i) { sort(all(val[i])); val[i].resize(unique(all(val[i])) - val[i].begin()); bit[i].resize(sz(val[i]) + 5); } } int upd(int x,int y) { for(; x > 0 ; x -= x & -x) { int p = upper_bound(all(val[x]),y) - val[x].begin(); for(; p > 0 ; p -= p & -p) bit[x][p]++; } } int get(int x,int y) { int ans = 0; for(; x < N ; x += x & -x) { int p = lower_bound(all(val[x]),y) - val[x].begin() + 1; for(; p < bit[x].size() ; p += p & -p) ans += bit[x][p]; } return ans; } }; typedef pair<int,int> ii; vector<ii> Poi; vector<int> Que; int Math[N]; int Info[N]; int Sum[N]; int ans[N]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin >> n; Poi.resize(n); int q; cin >> q; vector<int> row = {-1}; vector<int> col = {-1}; for(ii &p : Poi) { cin >> p.X >> p.Y; row.pb(p.X); col.pb(p.Y); } sort(all(Poi),[&](const ii &a,const ii &b) { return a.X + a.Y > b.X + b.Y; }); sort(all(row)); row.erase(unique(all(row)),row.end()); sort(all(col)); col.erase(unique(all(col)),col.end()); for(ii &p : Poi) { p.X = lower_bound(all(row),p.X) - row.begin(); p.Y = lower_bound(all(col),p.Y) - col.begin(); for(int i = p.X ; i > 0 ; i -= i & -i) BIT2D::val[i].push_back(p.Y); } for(int i = 0 ; i < q ; ++i) { int M; cin >> M; Math[i] = lower_bound(all(row),M) - row.begin(); int I; cin >> I; Info[i] = lower_bound(all(col),I) - col.begin(); cin >> Sum[i]; Que.pb(i); } sort(all(Que),[&](const int &a,const int &b) { return Sum[a] > Sum[b]; }); BIT2D::init(); int ptr = 0; for(int i : Que) { for(; ptr < Poi.size() ; ++ptr) { int x = Poi[ptr].X; int y = Poi[ptr].Y; if (row[x] + col[y] < Sum[i]) break; BIT2D::upd(x,y); } ans[i] = BIT2D::get(Math[i],Info[i]); } for(int i = 0 ; i < q ; ++i) cout << ans[i] << "\n"; }

Compilation message (stderr)

examination.cpp: In function 'int BIT2D::upd(int, int)':
examination.cpp:30:5: warning: no return statement in function returning non-void [-Wreturn-type]
     }
     ^
examination.cpp: In function 'int BIT2D::get(int, int)':
examination.cpp:35:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             for(; p <  bit[x].size() ; p += p & -p)
                   ~~^~~~~~~~~~~~~~~~
examination.cpp: In function 'int main()':
examination.cpp:96:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(; ptr < Poi.size() ; ++ptr) {
               ~~~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...