北京集訓 DAY1 Afternoon

2021-08-09 08:50:18 字數 3247 閱讀 5559

對於三個點 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 做法 就是個一簡單的質...