題目大意:給你那個區間,問哪些區間斷的重疊區間的個數大於等於k,輸出最小區間數(要合併)
思路:將左右端點分開(不在乙個結構體裡)儲存在乙個陣列,加標記確定左端點還是右端點,排序,遇到左端點ans++,右端點ans--,大於等於k則記錄…………
最後區間合併時出現了問題,想了好久,慌了……最後有一點,排序時必須按雙重關鍵字排序!!讓左端點小於右端點,這樣可以解決點區間bug。。。
比賽結束後十分鐘過得…………pity
#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;
#define maxn 2000005
#define mod 1000000007
#define mem(a) memset(a , 0 , sizeof(a))
#define ll __int64
ll n , k;
struct node
*/ friend bool operator <(node a , node b)
}arr[maxn];
struct pointe
res[maxn] ;
int main()
sort(arr , arr + num );
int ans = 0;
int pos = 1;
int left = 0;
for(int i = 0 ; i < num ; i ++)
else if(ans < k && left)
}int pos2 = pos;
for(int i = 1 ; i < pos - 1 ; i ++)
printf("%d\n" , pos - 1);
res[0].flag = 0;
for(int i = 1 ; i < pos2 ; i ++)
{//cout << res[i].flag<
986 區間列表的交集
weekly contest 122的 區間列表的交集 給定兩個由一些閉區間組成的列表,每個區間列表都是成對不相交的,並且已經排序。返回這兩個區間列表的交集。形式上,閉區間 a,b 其中a b 表示實數x的集合,而a x b。兩個閉區間的交集是一組實數,要麼為空集,要麼為閉區間。例如,1,3 和 2...
986 區間列表的交集
給定兩個由一些 閉區間 組成的列表,firstlist 和 secondlist 其中 firstlist i starti,endi 而 secondlist j startj,endj 每個區間列表都是成對 不相交 的,並且 已經排序 返回這 兩個區間列表的交集 形式上,閉區間 a,b 其中 a...
列表取交集 986 區間列表的交集
給定兩個由一些閉區間組成的列表,每個區間列表都是成對不相交的,並且已經排序。返回這兩個區間列表的交集。形式上,閉區間 a,b 其中 a b 表示實數 x 的集合,而 a x b。兩個閉區間的交集是一組實數,要麼為空集,要麼為閉區間。例如,1,3 和 2,4 的交集為 2,3 示例 輸入 a 0,2 ...