Submission #540749

#TimeUsernameProblemLanguageResultExecution timeMemory
540749status_codingExhibition (JOI19_ho_t2)C++14
50 / 100
1082 ms1788 KiB
#include <bits/stdc++.h> #pragma GCC optimize ("unroll-loops") using namespace std; struct pos { int val, s; bool operator<(pos b) { if(val != b.val) return val<b.val; return s < b.s; } }; int n,m; pos v[100005]; int s[100005]; int dp[100005]; int cbDp(int val) { for(int i=n;i>=0;i--) if(dp[i] <= val) return i; return n+1; /* int st=0, dr=n, mij, last=n+1; while(st <= dr) { mij = (st+dr)/2; if(dp[mij] <= val) { last=mij; st=mij+1; } else dr=mij-1; } return last; */ } int cbS(int val) { for(int i=1;i<=m;i++) if(s[i] >= val) return i; return m+1; /* int st=1, dr=m, mij, last=m+1; while(st <= dr) { mij=(st+dr)/2; if(s[mij] <= val) { last=mij; dr=mij-1; } else st=mij+1; } return last; */ } int main() { cin>>n>>m; for(int i=1;i<=n;i++) cin>>v[i].s>>v[i].val; sort(v+1, v+n+1); for(int i=1;i<=m;i++) cin>>s[i]; sort(s+1, s+m+1); for(int i=1;i<=n;i++) dp[i] = 1e9; for(int i=1;i<=n;i++) { if(v[i].s > s[m]) continue; int sId = cbS(v[i].s); for(int j=n-1;j>=0;j--) { int nsId = max(sId, dp[j]+1); if(nsId <= m) dp[j+1] = min(dp[j+1], nsId); } /* for(int j=0;j<=n;j++) cout<<dp[j]<<' '; cout<<'\n'; */ } int ans=0; for(int i=1;i<=n;i++) if(dp[i] != 1e9) ans = max(ans, i); cout<<ans; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...