f[i]=min(f[j])+1,線段j與線段i有交,且l[i]-l[j]<=l。
線段j與線段i有交等價於y[j]>=x[i],x[j]<=y[i]。
因為l[i]遞增,所以可以維護乙個單調遞增的j,表示[j,i-1]範圍內都可以更新f[i]。
用k-d樹動態維護即可,時間複雜度$o(n\sqrt)$。
#include#includeconst int n=250010,inf=2000000000;
int n,l,i,j,k,root,cmp_d,x,y;
struct pa[n];
inline void read(int&a)
struct nodet[n];
inline bool cmp(node a,node b)
inline void up(int x)
if(t[x].r)
}inline void up2(int x)
int build(int l,int r,int d,int f)
inline void change(int x,int p)
void ask(int x)
if(t[x].d[0]<=x&&t[x].d[1]>=y&&t[x].vall)change(a[j++].p,inf);
k=inf,x=a[i].y,y=a[i].x,ask(root);
if(kprintf("%d\n",a[i].f} return 0;
}
1171 大整數的因子
1171 大整數的因子 時間限制 1000 ms 記憶體限制 65536 kb 提交數 5166 通過數 2992 題目描述 已知正整數k滿足2 k 9,現給出長度最大為30位的十進位製非負整數c,求所有能整除c的k。輸入 乙個非負整數c,c的位數 30。輸出 若存在滿足 c k 0 的k,從小到大...
一本通1171 大整數的因子
題目描述 已知正整數k滿足2 k 9,現給出長度最大為30位的十進位製非負整數c,求所有能整除c的k。輸入 乙個非負整數c,c的位數 30。輸出 若存在滿足 c k 0 的k,從小到大輸出所有這樣的k,相鄰兩個數之間用單個空格隔開 若沒有這樣的k,則輸出 none 輸入樣例 30 輸出樣例 2 3 ...
BZOJ 2464 小明的遊戲
time limit 10 sec memory limit 128 mb submit 829 solved 338 submit status discuss 小明最近喜歡玩乙個遊戲。給定乙個n m的棋盤,上面有兩種格仔 和 遊戲的規則很簡單 給定乙個起始位置和乙個目標位置,小明每一步能向上,下...