题面
【正解】
显然先按a排个序,然后用b乱搞
第一问用D开头的定理求最长下降子序列
第二问乱搞
for (int i=1;i<=n;i++) { int* t=upper_bound(f+1,f+n+1,c[i].b,cmp); c[i].ans=t-f; *t=c[i].b; }
感性理解:相当于维护若干大蛋糕,每次贪心地放比蛋糕顶大而最小的顶
代码