Submission #1118509

#TimeUsernameProblemLanguageResultExecution timeMemory
1118509lampoopppAdvertisement 2 (JOI23_ho_t2)C++17
100 / 100
1020 ms58028 KiB
#include <bits/stdc++.h> #define int long long using namespace std; const int N=5e5; map<int,int> mp; int val[N+1]; //nen x pair<int,int> p[N+1]; bool took[N+1]; struct event { int tme, id; bool operator < (const event & o) const { return tme < o.tme; } }; priority_queue<event> pq; int32_t main() { ios_base::sync_with_stdio(false); cin.tie(0); int n; cin >> n; for(int i=1;i<=n;++i) { cin >> p[i].second >> p[i].first; mp[p[i].second]=0; } int tme=0; for(auto& k : mp) { val[++tme] = k.first; k.second=tme; } sort(p+1,p+n+1); //priority_queue<pair<int,int>> int cnt=0; for(int i=n;i>0;--i) { p[i].second=mp[p[i].second]; //cout << "SET " << p[i].first << " :\n"; while(!pq.empty() && pq.top().tme>=p[i].first) { auto k = pq.top(); pq.pop(); if(took[k.id]==1) continue; //cout << k.id << " " << k.tme << '\n'; took[k.id]=1; if(k.id>1 && !took[k.id-1]) { int tme = k.tme - (val[k.id]-val[k.id-1]); pq.push({tme,k.id-1}); } if(k.id<n && !took[k.id+1]) { int tme = k.tme- (- val[k.id]+val[k.id+1]); pq.push({tme,k.id+1}); } } if(!took[p[i].second]) { //cout << i << "L"; pq.push({p[i].first,p[i].second}); cnt++; } } cout << cnt; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...