SCOI2015 國旗計畫

2022-03-19 20:48:59 字數 804 閱讀 7684

bzoj

luogu

先考慮破環為鏈

由於區間不包含,我們sort之後可以貪心的選左端點在當前右端點之前的最後乙個

然後預處理乙個倍增陣列,每次logn查一下

複雜度\(o(nlogn)\)

空間兩倍,tot+1的r設為inf

#includeusing namespace std;

const int _=4e5+5;

int re()

while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();

return x*w;

}int n,m,tot,ans[_],f[20][_];

struct nodes[_];

bool cmp(node a,node b);

else s[i]=(node),s[++tot]=(node);

}sort(s+1,s+tot+1,cmp);s[0].r=s[tot+1].r=2e9+1;

for(int i=1,j=1;i<=tot;i++)

for(int i=1;i<=18;i++)

for(int j=1;j<=tot;j++)

f[i][j]=f[i-1][f[i-1][j]];

for(int i=1;i<=n;i++)

ans[s[i].id]=solve(i,s[i].l+m);

for(int i=1;i<=n;i++)printf("%d ",ans[i]);

return 0;

}

SCOI2015 國旗計畫

演算法難度5,思維難度6,難度5 給定乙個長度為m mm的環,環上有m mm個點 1,m 1,m 1,m 以及n nn個互不包含的區間。要求對於每個區間求出,在必須選這個區間的前提下,能使得所有被選區間覆蓋整個環的最少區間數。1 n 2 1 05,m 10 91 le n le 2 times 10...

SCOI2015 國旗計畫

斷環為鏈,將環複製兩倍。用to i j 表示從點i出發,走 2 j 步能夠到達的最遠的 右端點qwq 的編號。注意為了方便判斷已經走了一圈了,我們最後一步先不要跳,只需要判斷當前右端點仍在i n之前即可。然後這個樣子的話,最後答案需要 1。如下 include include include inc...

SCOI2015 國旗計畫

題目 首先考慮一下環形的區間覆蓋問題怎麼做 我們可以把環倍長成鏈,之後驚訝的發現我只會列舉乙個 i 作為起點跑 i,i m 的區間覆蓋 看起來非常垃圾,但是會這樣做就夠了 考慮列舉到的這個 i 作為乙個某乙個給定的區間的左端點的時候,想要覆蓋 i,i m 這段區間這個給定的區間是必須選擇的,於是我們...