4418 Prime的把妹計畫

2022-05-21 01:27:53 字數 1091 閱讀 7369

基礎線段樹

先算al<=ar的,之後取反再算一次

設l[i]表示往左第乙個大於當前的位置+1,r[i]是往右小於的-1

那麼區間[l,r]滿足條件當且僅當r[l]>=r且l[r]<=l

列舉右端點,在x處維護[x,x~r]的最大值,考慮r-1->r的變化

加入的區間[x,r]需要滿足r[x]>=r,l[r]<=x,即對滿足r[x]>=r的x∈[l[r],r]的更新

按照r[x]排序單調單點刪r[x]#define fo(a,b,c) for (a=b; a<=c; a++)

#define fd(a,b,c) for (a=b; a>=c; a--)

#define inf 2147483647

#define min(a,b) (ab?a:b)

#define ll long long

//#define file

using namespace std;

struct type q[50001];

struct type b[50001];

int tr[200001][2],tr[200001],a[50001],l[50001],r[50001],d[50001],ans[50001],h,t,n,i,j,k,l,q,find;

bool cmp(type a,type b)

}void change(int t,int l,int r,int x,int y,int s)

down(t*2,mid-l+1);

down(t*2+1,r-mid);

if (x<=mid) change(t*2,l,mid,x,y,s);

if (mid=a[i]) --t;

r[i]=d[t]-1;

d[++t]=i;

} fo(i,1,n) b[i]=;

sort(b+1,b+n+1,cmp);

mt(1,1,n),j=1,k=1;

fo(i,1,n) }

int main()

Prime 演算法的簡述

前面在介紹並查集時順便提了kruskal演算法,既然已經說到了最小生成樹問題,就沒有道理不把prime演算法說了。這裡面先補充下kruskal演算法的大概意思,kruskal演算法通過把所有的邊從小到大排列後,不斷取權值最小的邊加入最小生成樹 起初可能是離散的多個樹,最終連成乙個整體 並通過並查集來...

Prime 程式設計師的修養

求質數演算法的n種境界 1 試除法和初級篩法 儘管題目並沒有要我們寫乙個最優的演算法,但是身為乙個程式設計師,優化應該是一種習慣,在程式設計的過程中,隨著思考進行優化。如果你只能想出乙個最簡單的方法,難道你會有什麼競爭力嗎?最開始我用的就是這個方法,可以說這是最簡單的一種方法了,而且最開始,我就是想...

poj 2395 prime的遞迴實現

求最小水桶的大小,每到達乙個農村就能把水桶補滿。可見是用生成最小樹,求最大邊。關於prime個人感覺用遞迴實現會少乙個for的時間。本題的坑 輸入邊的時候要找最小的,不然會出錯。1 include2 include3 using namespace std 4const int inf 0x3f3f...