對於三個點 a b c 有兩個邊權 x y
有結論 min( (a+b)/x , (b+c)/y ) < (a+b+c)/(x+y)
由結論推廣出去 三個點一定比四個點優 四個點一定比五個點優 ...............
我們可以得到結論 由兩個點和乙個邊權得到的值最優
貪心 列舉高度 統計最小的寬度
當身高》x 寬度<=x 一定躺下
身高<=x 寬度》x 一定不會躺下
當身高,寬度<=x
1丶 身高》寬度 一定不躺下
2丶 可以躺下 寬度-身高的值越大越好 (記錄sort取大的數)
套路。。
每次都是2^n 變成 2^(n-1) 這就是線段樹從底層向上返回值的變化啊!
只需要維護乙個flag 表示當前層是什麼操作
1 #include 2 #include 3**4const
int maxn=200010;5
6int
n,q,k;78
inta[maxn];910
struct
node ;
14 node t[maxn<<2
];15
16 inline void read(int&x)
2223
void build_tree(int now,int l,int r,int
flag)
29int mid=(l+r)>>1
;30 build_tree(now<<1,l,mid,flag^1
);31 build_tree(now<<1|1,mid+1,r,flag^1
);32
if(flag) t[now].sum=t[now<<1].sum|t[now<<1|1
].sum;
33else t[now].sum=t[now<<1].sum^t[now<<1|1
].sum;
34return;35
}3637void modify(int now,int pos,int v,int
flag)
42int mid=(t[now].l+t[now].r)>>1;43
if(pos<=mid) modify(now<<1,pos,v,flag^1
);44
else modify(now<<1|1,pos,v,flag^1
);45
if(flag) t[now].sum=t[now<<1].sum|t[now<<1|1
].sum;
46else t[now].sum=t[now<<1].sum^t[now<<1|1
].sum;
47return;48
}4950int
hh()
63fclose(stdin);
64fclose(stdout);
65return0;
66}6768
int sb=hh();
69int main(int argc,char**argv)
北京集訓DAY3
消去合法的序列 剩下的不合法序列一定是 3兩種括號個數各加1除2 手算一下即可4 5 include 6 include 7 include 8 9const int maxn 100010 10 11int len,top,cnt 1213 char s maxn 1415 inthh 25int...
湖南集訓Day1
難度不斷網 斷網 卡特蘭數取模 由於資料範圍小,直接做。考試時斷網。忘記卡特蘭數公式,推錯了只有5分。數學公式要記別每次都現用現搜!include include include using namespace std int f 1007 int n,m,ans intmain 模數較小是乙個坑點...
國慶集訓Day1
題意 有 n 個數 a 1,a 2,a n 有m個數 b 1,b 2,b n 令 a a 1 times a 2 times times a n 令 b b 1 times b 2 times times b n 判斷 a 是否是 b 的倍數 輸入 n,m 輸出 yes no 做法 就是個一簡單的質...