Test instructions
N a score. M operations.
Q a B: Query the highest score from the first to the B scores
U a B: Conversion of Grade A to B
Ideas:
Look at the code,
Code:
Const intMAXN =200010;intmaxs[maxn<<2];intn,m;voidPushup (intRT) {Maxs[rt]= Max (maxs[rt<<1], maxs[rt<<1|1] );}voidBuildintLintRintRT) { if(l==R) {scanf ("%d",&Maxs[rt]); return; } intm = (L + r) >>1; Build (Lson); Build (Rson); Pushup (RT);}voidUpdateintPintAddintLintRintRT) { if(l==R) {Maxs[rt]=add; return; } intm = (L + r) >>1; if(P <=m) update (P,add,lson); ElseUpdate (P,add,rson); Pushup (RT);}intQueryintLintRintLintRintRT) { if(L<=l && r<=R) { returnMaxs[rt]; } intm = (L + r) >>1; intRET =0; if(L <= m) ret =Max (ret, query (L,r,lson)); if(R > m) ret =Max (ret, query (L,r,rson)); returnret;}intMain () { while(SCANF ("%d%d", &n,&m)! =EOF) {Build (1N1); for(intI=1; i<=m;++i) { CharC; intb; GetChar (); scanf ("%c%d%d",&c,&a,&b); if(c = ='Q') printf ("%d\n", query (A, B,1N1)); Else if(c = ='U') Update (A, B,1N1); } }}
Hdu 1754 I Hate It (single point of Update, section check maximum)