題解:傳送門
要求任意子集均滿足,我們考慮對於每乙個區間[p,q](顯然只有q=
ri時這個區間才有詢問的意義,同時我們也有p=
lj),所有[l,r]在[p,q]之內的a的和s應滿足s<=q-p+1即s+p-1<=q,否則一定不滿足hall定理。於是我們把所有的區間按r公升序排列,考慮列舉q,維護p=
lj時的答案,我們每次做到區間[l,r]時,所有p=1…l的和s都增大了a,然後我們查詢1…r的最大值是否<=r-l+1,用線段樹維護即可。
把環複製一遍變成鏈的情況,注意特判掉詢問總區間的情況,具體證明可見神犇blog
#include
#include
#include
#include
#include
using
namespace
std;
#define ll long long
#define inf 0x3f3f3f3f
#define n 100010
inline ll read()
while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
return x*f;
}int n,m,a[n<<2];
struct quertr[n<<4];
inline
void pushup(int p)
inline
void build(int p,int l,int r)
int mid=l+r>>1;
build(p<<1,l,mid);build(p<<1|1,mid+1,r);pushup(p);
}inline
void doadd(int p,int val)
inline
void pushdown(int p)
inline
void add(int p,int l,int r,int x,int y,int val)
int mid=l+r>>1;pushdown(p);
if(x<=mid) add(p<<1,l,mid,x,y,val);
if(y>mid) add(p<<1|1,mid+1,r,x,y,val);
pushup(p);
}inline
int qmax(int p,int l,int r,int x,int y)
int main()if(sum>m)n=tot;tot=0;
for(int i=1;i<=n;++i) a[++tot]=q[i].l,a[++tot]=q[i].r;
sort(a+1,a+tot+1);tot=unique(a+1,a+tot+1)-a-1;
build(1,1,tot);sort(q+1,q+n+1);bool flag=1;
for(int i=1;i<=n;++i)
}puts(flag?"yes":"no");
}return
0;}
1214 圓桌會議
problem description hdu acm集訓隊的隊員在暑假集訓時經常要討論自己在做題中遇到的問題.每當面臨自己解決不了的問題時,他們就會圍坐在一張圓形的桌子旁進行交流,經過大家的討論後一般沒有解決不了的問題,這也只有hdu acm集訓隊特有的圓桌會議,有一天你也可以進來體會一下哦 在一...
HDU 1214圓桌會議
description hdu acm集訓隊的隊員在暑假集訓時經常要討論自己在做題中遇到的問題.每當面臨自己解決不了的問題時,他們就會圍坐在一張圓形的桌子旁進行交流,經過大家的討論後一般沒有解決不了的問題,這也只有hdu acm集訓隊特有的圓桌會議,有一天你也可以進來體會一下哦 在一天在討論的時候,...
hdu 1124 圓桌會議
主題思想 數學題,給乙個串數字組成乙個環,12345 n 經過有限次相鄰作為的對換,變成 1,n,n 1,n 2,2 如果是乙個直線,不是乙個環,根據直線長度n 需要的次數為n 1 n 2 n 3 1.為 n n 1 2 把乙個環盡可能分成長度相等的兩段,分別計算兩段直線的次數,和就是最小的操作。參...