uva 1608 分治 中途相遇法

2021-08-06 07:48:09 字數 649 閱讀 6088

參考紫書,利用stl map,找到陣列中相同元素的關係。每找到乙個所求範圍唯一元素,對元素所在的範圍進行分治。

注意:不能用prev和next作陣列名會使juge無法判斷

#include#includeusing namespace std;

const int maxn = 200000 + 5;

int num[maxn], pre[maxn], nex[maxn];

mapcur;

inline bool arry_unique(int p, int l, int r)

bool check(int l, int r)

return false;

}int main()

cur[num[i]] = i;

}cur.clear();

for(int i = n - 1; i >= 0; i--)

cur[num[i]] = i;

}int l = 0, r = n - 1;

//continue;

if(check(l, r)) printf("non-boring\n");

else printf("boring\n");

}return 0;

}

UVA1608 不無聊的序列(分治,中途相遇)

如果乙個序列裡沒有只出現一次的元素,那麼這個序列顯然是無聊的。如果乙個序列裡有乙個出現一次的元素a k 那麼對於這個序列無聊或不無聊的判斷,只需判斷 1,k 1 和 k 1,n 是不是無聊的。所以就可以遞迴下去,那麼我們現在的問題就變為如何找到乙個只出現一次的元素。預處理好每個數的前驅,後繼,掃一遍...

UVA 1608 啟發式分治

題目大意 給乙個序列,問這個序列無不無聊,不無聊序列的定義是任意的連續序列中都能找到乙個只出現過一次的數字 題目思路 首先給乙個序列,這個序列中滿足有乙個只出現過一次的數字,那麼,在這個序列中,所有跨過這個數字的區間一定都是不無聊的,所以想出現無聊的數字一定得在兩邊找,那麼就可以想到利用分治。然後使...

UVA 10125 中途相遇法

題意 給定乙個整數集合,找出最大的d,使得a b c d,a,b,c,d是集合中不同的元素 思路 如果單純的列舉a,b,c的複雜度是o n 3 的,為了降低複雜度,可以先把a b的情形都找出來,然後再列舉d和c,是否符合要求 ac include include include include in...