日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[NOI2016]区间-线段树

發布時間:2025/4/16 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [NOI2016]区间-线段树 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一道很巧妙的題。

首先我們需要解決的問題,怎么快速判斷選出的m個區間是否存在交。

我們反過來考慮這個問題,

我們每一個選出的區間,就對應的在線段樹上區間加1,那么只要存在最大值等于m,就一定有m個區間滿足條件了。

那么把區間從小到大排序,一直加到最大值等于m,更新答案,然后刪掉最小區間,不停的做下去就好了。

#include <bits/stdc++.h> #define lson p<<1 #define rson (p<<1)|1 using namespace std; inline int gi () {int x=0, w=0; char ch=0;while (! (ch>='0' && ch<='9') ) {if (ch=='-') w=1;ch=getchar ();}while (ch>='0' && ch<='9') {x= (x<<3) + (x<<1) + (ch^48);ch=getchar ();}return w?-x:x; }const int N=5e5+10; int n,m,head=1,Ans=0x3f3f3f3f,Num,Ls[N<<1],LS[N<<1],Cnt[N<<3],Tag[N<<3];struct Sect {int l, r, val; }s[N]; bool Cmp (Sect a, Sect b) {return a.val<b.val; }void Pushup (int p) {Cnt[p]=max (Cnt[lson], Cnt[rson]); }void Pushdown (int p) {if (!Tag[p]) return;Tag[lson]+=Tag[p];Tag[rson]+=Tag[p];Cnt[lson]+=Tag[p];Cnt[rson]+=Tag[p];Tag[p]=0; }void Modify (int p, int l, int r, int Ml, int Mr, int val) {if (l>=Ml && Mr>=r) {Cnt[p]+=val;Tag[p]+=val;return;}Pushdown (p);int Mid= (l+r) >> 1;if (Ml<=Mid) Modify (lson, l, Mid, Ml, Mr, val);if (Mr>Mid) Modify (rson, Mid+1, r, Ml, Mr, val);Pushup (p); }int main () {n=gi (), m=gi ();memset (Ls, -1, sizeof (Ls) );memset (LS, -1, sizeof (LS) );for (int i=1;i<=n;++i) {s[i].l=gi (), s[i].r=gi ();s[i].val=s[i].r-s[i].l;Ls[++Num]=s[i].l, Ls[++Num]=s[i].r;}sort (Ls+1, Ls+Num+1);for (int i=1, j=0;i<=Num;++i) {if (Ls[i]!=Ls[i-1]) LS[++j]=Ls[i];if (i==Num) {Num=j;break;}}for (int i=1;i<=n;++i) {s[i].l=lower_bound (LS+1, LS+Num+1, s[i].l) -LS;s[i].r=lower_bound (LS+1, LS+Num+1, s[i].r) -LS;} sort (s+1, s+n+1, Cmp);for (int i=1;i<=n;++i) {Modify (1, 1, Num, s[i].l, s[i].r, 1); while (Cnt[1]==m) {Ans=min (Ans, s[i].val-s[head].val);Modify (1, 1, Num, s[head].l, s[head].r, -1);head++;}}printf ("%d\n", Ans==0x3f3f3f3f?-1:Ans);return 0; } BY BHLLX

?

轉載于:https://www.cnblogs.com/Bhllx/p/9930296.html

總結

以上是生活随笔為你收集整理的[NOI2016]区间-线段树的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。