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

本文共 1870 字,大约阅读时间需要 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 【拓扑序 + 堆】

发表评论

最新留言

网站不错 人气很旺了 加油
[***.172.111.71]2022年05月22日 09时47分01秒