제출 #481198

#제출 시각아이디문제언어결과실행 시간메모리
481198LoboExhibition (JOI19_ho_t2)C++17
50 / 100
1081 ms1772 KiB
#include <bits/stdc++.h> using namespace std; const long long INFll = (long long) 1e18 + 10; const int INFii = (int) 1e9 + 10; typedef long long ll; typedef int ii; typedef long double dbl; #define endl '\n' #define sc second #define fr first #define mp make_pair #define pb push_back #define all(x) x.begin(), x.end() #define maxn 100010 ii n, m, bit[maxn]; pair<ii,ii> p[maxn]; void att(ii pos, ii val) { for(ii i = pos; i <= m; i+= i&-i) { bit[i] = max(bit[i],val); } } ii query(ii pos) { ii ans = 0; for(ii i = pos; i > 0; i-= i&-i) { ans = max(ans, bit[i]); } return ans; } int main() { ios::sync_with_stdio(false); cin.tie(0); //freopen("in.in", "r", stdin); //freopen("out.out", "w", stdout); cin >> n >> m; for(ii i = 1; i <= n; i++) { cin >> p[i].sc >> p[i].fr; } vector<ii> c; for(ii i = 1; i <= m; i++) { ii x;cin >> x; c.pb(x); } c.pb(INFii); sort(p+1,p+1+n); sort(all(c)); priority_queue<pair<ii,ii>> q; for(ii i = 1; i <= n; i++) { ii x = lower_bound(all(c),p[i].sc)-c.begin()+1; if(x > m) continue; ii qrr = query(x-1)+1; att(x,qrr); vector<pair<ii,ii>> col; while(q.size() > 0 && x <= q.top().fr) { att(q.top().fr,q.top().sc); auto aux = q.top(); q.pop(); if(aux.fr+1 <= m) col.pb(mp(aux.fr+1,aux.sc+1)); } for(auto aux : col) { q.push(aux); } if(x+1 <= m) q.push(mp(x+1,qrr+1)); } cout << query(m) << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...