給定兩個操作:
multiply l r x 區間裡都乘以乙個數x
max l r : 計算區間內乙個2,3,5,7個數最大值。
思路:維護4個最大值。藍瘦。
1/** 有 n 個數和 5 種操作
2add a b c:把區間[a,b]內的所有數都增加 c
3set a b c:把區間[a,b]內的所有數都設為 c
4sum a b:查詢區間[a,b]的區間和
5max a b:查詢區間[a,b]的最大值
6min a b:查詢區間[a,b]的最小值7*/
8 #include 9
using
namespace
std;
10const
int maxn = 2e5 + 7;11
const
long
long inf = 1ll << 62;12
int pri=;
13struct
segment_tree
14 tre[maxn << 2
];20
long
long arr[maxn*4];//
需要輸入的陣列
21 inline void push_up(int
rt)22
27 tre[rt].sum = tre[rt<<1].sum + tre[rt<<1|1
].sum;
28 tre[rt].max = max(tre[rt<<1].max, tre[rt<<1|1
].max);
29 tre[rt].min = min(tre[rt<<1].min, tre[rt<<1|1
].min);30}
31 inline void push_down(int
rt)32
48if
(tre[rt].add_lazy)
4961}62
void build(int rt,int l,int
r)63
73int mid = (l + r) >> 1
;74 build(rt<<1
,l,mid);
75 build(rt<<1|1,mid+1
,r);
76push_up(rt);77}
78void update1(int rt,int l,int r,long
long val)///
add79
89int mid = (tre[rt].l + tre[rt].r) >> 1;90
if(r <=mid)
9194
else
if(l >mid)
9598
else
99103
push_up(rt);
104}
105void update2(int rt,int l,int r,long
long val)///
set106
116int mid = (tre[rt].l + tre[rt].r) >> 1
;117
if(r <=mid) else
if(l >mid) else
125push_up(rt);
126}
127long
long query1(int rt,int l,int r)///
sum128
133int mid = (tre[rt].l + tre[rt].r) >> 1
;134
if(r <=mid) else
if(l >mid) else
141}
142long
long query2(int rt,int l,int r)///
max143
148int mid = (tre[rt].l + tre[rt].r) >> 1
;149
if(r <=mid) else
if(l >mid) else
156}
157long
long query3(int rt,int l,int r)///
min158
163int mid = (tre[rt].l + tre[rt].r) >> 1
;164
if(r <=mid) else
if(l >mid) else
171}
172 }st[10
];173
intmain()
191}
192}
193 }else
199 printf("
answer ");
200 printf("
%lld\n
",ans);
201}
202}
203return0;
204}
205206
/*207
5 6208
multiply 3 5 2
209multiply 2 5 3
210211
max 1 5
212multiply 1 4 2
213multiply 2 5 5
214max 3 5
215216
*/
2017南寧區域賽現場賽
記憶化搜尋 貪心根據情況分類討論一下就行 如果強的人為偶數 那麼肯定是他們自相殘殺 否則要拿出乙個弱的人和乙個強的人比賽 他們之間的勝負情況 要討論一下 如果沒有弱的人了 那麼肯定只能和強的人打 記憶化搜尋 維護強的人和弱的人個數 容易發現 強的人和弱的人一定時 答案也是一定的 於是可以用map記錄...
2015 北京區域賽現場賽1C 裸的BFS
本來以為是個dp,想這怎麼轉移,一直不會做,後來看了題解發現好簡單 1.對於兩種操作的這類問題,要想好操作的順序會不會影響,這題而言,如果你是操作1和操作2間歇著做的話,一定不如把操作二都做完之後再對那些做過操作一的做一次操作 想一想就知道了,當時也想找到操作之間的關係,可是沒發現,好題啊!2.考慮...
HPU組隊賽J Ball King(線段樹)
時間限制 1 second 記憶體限制 512 mb hpu601球王爭霸賽即將舉行,acmer紛紛參加.現在有n個人報名參賽,每個人都有乙個實力值 ai,實力值較大者獲勝.為保證比賽公平,我們定義比賽規則 第一輪 1,2 pk,然後 3,4 pk.最後 2i 1,2i pk.第二輪 1,2 w i...