BZOJ2924 [Poi1998]Flat broken lines 【Dilworth定理 + 树状数组】
发布日期:2021-08-16 15:55:43 浏览次数:12 分类:技术文章

本文共 1860 字,大约阅读时间需要 6 分钟。

题目链接

题解

题面有误。。是\(45°\)

如果两个点间连线与\(x\)轴夹角在\(45°\)以内,那么它们之间连边

求最小路径覆盖 = 最长反链
由于\(45°\)比较难搞,我们利用复数翻转一下,逆时针旋转\(45°\)
这样就求一条从左上到右下的最长链
我们将所有点按\(x\)排序,令\(f[i]\)表示\(i\)结尾的最长链
那么
\[f[i] = max\{f[j] + 1\} \quad [j < i \; y_j > y_i]\]
离散化一下用树状数组优化

#include
#include
#include
#include
#include
#include
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)#define REP(i,n) for (int i = 1; i <= (n); i++)#define mp(a,b) make_pair
(a,b)#define cls(s) memset(s,0,sizeof(s))#define cp pair
#define LL long long int#define lbt(x) (x & -x)using namespace std;const int maxn = 30005,maxm = 100005,INF = 1000000000;inline int read(){ int out = 0,flag = 1; char c = getchar(); while (c < 48 || c > 57){if (c == '-') flag = -1; c = getchar();} while (c >= 48 && c <= 57){out = (out << 3) + (out << 1) + c - 48; c = getchar();} return out * flag;}struct point{ double x,y; int d;}p[maxn];inline bool operator <(const point& a,const point& b){ return a.x == b.x ? a.d < b.d : a.x < b.x;}int n,tot;double b[maxn];inline int getn(double x){return lower_bound(b + 1,b + 1 + tot,x) - b;}int s[maxn],f[maxn];void modify(int u,int v){while (u) s[u] = max(s[u],v),u -= lbt(u);}int query(int u){int re = 0; while (u <= n) re = max(re,s[u]),u += lbt(u); return re;}int main(){ n = read(); double x,y,s2 = sqrt(2) / 2.0; REP(i,n){ x = read(); y = read(); p[i] = (point){s2 * (x - y),s2 * (x + y)}; b[i] = p[i].y; } sort(b + 1,b + 1 + n); tot = 1; for (int i = 2; i <= n; i++) if (b[i] != b[tot]) b[++tot] = b[i]; for (int i = 1; i <= n; i++) p[i].d = getn(p[i].y); sort(p + 1,p + 1 + n); int ans = 0; for (int i = 1; i <= n; i++){ f[i] = query(p[i].d + 1) + 1; modify(p[i].d,f[i]); ans = max(ans,f[i]); } printf("%d\n",ans); return 0;}

转载于:https://www.cnblogs.com/Mychael/p/9109971.html

转载地址:https://blog.csdn.net/weixin_30810239/article/details/98612066 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:hdu Minimum Inversion Number(逆序数的小知识与线段树)
下一篇:BZOJ3832 [Poi2014]Rally 【拓扑序 + 堆】

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年03月27日 19时24分31秒