RMQ.
1 /*3183*/2#include <cstdio>3#include <cstring>4#include <cstdlib>5 6 #defineMAXN 10057 8 CharS[MAXN], ANS[MAXN];9 intDP[MAXN][MAXN];Ten intn,len,m; One A intMinintXinty) { - returnS[x]<=s[y]?x:y; - } the - voidRmq_init () { - intI, J, K; - + for(i=0; i<len; ++i) -dp[i][0] =i; + for(j=1; (1<<J) <len; ++j) A for(i=0; i+ (1<<J)-1<len; ++i) atDp[i][j] = min (dp[i][j-1], dp[i+ (1<< (J-1))][j-1]); - } - - intRMQ (intLintr) { - intK =0; - in while((1<< (k +1)) <= r-l+1) -++K; to returnMin (Dp[l][k], dp[r-(1<<K) +1][k]); + } - the intMain () { * intI, J, K; $ intl;Panax Notoginseng - #ifndef Online_judge theFreopen ("data.in","R", stdin); +Freopen ("Data.out","W", stdout); A #endif the + while(SCANF ("%s%d", S, &m)! =EOF) { -Len =strlen (s); $ rmq_init (); $m = Len-m; -L = k =0; - while(m--) { theK = RMQ (k, len-m-1); -ans[l++] = s[k++];Wuyi } the for(i=0; i<l; ++i) - if(Ans[i]! ='0') Wu Break; -ANS[L] =' /'; About if(i = =l) $Puts"0"); - Else -Puts (ans+i); - } A + return 0; the}
"Hdoj" 3183 A Magic Lamp