ssl 2785 詢問 並查集 二分

2021-08-09 17:22:50 字數 957 閱讀 3310

a為未知的乙個元素兩兩不相同的序列

現在給定一些區間和這個區間的最小值(不一定對)

問那個區間是最先與之前的區間衝突的

一開始想寫一些奇怪的線段樹,然後發現自己並不會寫。。。

於是就想了想如何判斷幾個區間是否合法,發現:

最小值相同的區間放在一起,求出他們的交集及並集,如果區間交為空說明序列中有重複數字,不合法。

如果乙個最小值為a1的並集被a2的交集覆蓋了,且a1ps:並查集用while,不然會暴棧,對c++深深的惡意。。。

#include

#include

#include

#include

#include

#include

using

namespace

std;

int f[1500000];

struct arra[30000],b[30000];

struct arr1c[30000];

int n,m;

bool cmp(arr a,arr b)

int find(int x)

int z=0;

while (f[y]!=y)

return x;

}int check(int mid)

else

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

f[i]=i;

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

int main()

int l=0,r=m;

while (lint mid=(l+r+1)/2;

if (check(mid))

r=mid-1;

else

l=mid;

}if (!check(m)) l=-1;

printf("%d",l+1);

}

關押罪犯 並查集 二分

s 城現有兩座監獄,一共關押著n 名罪犯,編號分別為1 n。他們之間的關係自然也極不和諧。很多罪犯之間甚至積怨已久,如果客觀條件具備則隨時可能爆發衝突。我們用 怨氣值 乙個正整數值 來表示某兩名罪犯之間的仇恨程度,怨氣值越大,則這兩名罪犯之間的積怨越多。如果兩名怨氣值為c 的罪犯被關押在同一監獄,他...

擴散(二分答案 並查集)

乙個點每過乙個單位時間就會向四個方向擴散乙個距離,兩個點a b連通,記作e a,b 當且僅當a b的擴散區域有公共部分。連通塊的定義是塊內的任意兩個點u v都必定存在路徑e u,a0 e a0,a1 e ak,v 給定平面上的n給點,問最早什麼時刻它們形成乙個連通塊。我們可以二分答案,然後對於每個時...

poj3657 二分 並查集

二分哪一次操作是最後一次正確的操作 1即為錯誤操作。把最小值相同的詢問確定下來,可以得到乙個最小的集合,再更新這個集合的所屬,若有衝突就說明此操作有問題。include include include define maxd 1000010 define maxq 25010 using names...