hdu 3183 RMQ
来源:互联网 发布:sm3算法 编辑:程序博客网 时间:2024/06/05 15:13
返回的是RMQ的下标,有个地方要注意,就是在rmq模板比较大小的地方要改成<=,要不然如果有一连串的相同数字的话本来是要取的,结果没取
#include<string.h>#include<stdio.h>#include<math.h>const int M=1010;int min(int a,int b){return a<b?a:b;}int dp[20][M],LOG[M];void Make_Rmqindex(int n,char b[]){int i,j;for(i=1;i<=n;i++)dp[0][i]=i;for(i=1;i<=LOG[n];i++){int limit=n+1-(1<<i);for(j=1;j<=limit;j++){int x=dp[i-1][j],y=dp[i-1][j+(1<<i>>1)];dp[i][j]=b[x]<=b[y]?x:y;}}}int Rmq_Index(int l,int r,char b[]){int k=LOG[r-l+1];int x=dp[k][l];int y=dp[k][r-(1<<k)+1];return b[x]<=b[y]?x:y;}char s[M];int m;char ans[M];int main(){int i,j,len;LOG[0]=-1;for(i=1;i<M;i++)LOG[i]=LOG[i>>1]+1;s[0]='0';while(scanf("%s%d",s+1,&m)!=EOF){ len=strlen(s)-1; Make_Rmqindex(len,s); memset(ans,0,sizeof(ans)); int n=len-m; int pos=0; int tot=0; while(n) { if(pos+1==len-n+1) { strcpy(ans+tot,s+len-n+1); break; } pos=Rmq_Index(pos+1,len-n+1,s); ans[tot++]=s[pos]; n--; } i=0;//printf("ans:::%s\n",ans); while(ans[i]=='0'&&len-m>i) i++; if(i==len-m) printf("0\n"); else printf("%s\n",ans+i);}return 0;}
- HDU 3183 RMQ
- hdu 3183 RMQ 应用
- hdu 3183 RMQ
- HDU 3183 RMQ
- hdu-3183(贪心+RMQ)
- hdu 3183(RMQ应用)
- HDU 3183 A Magic Lamp【RMQ】
- hdu 3183 A Magic Lamp(RMQ)
- hdu 3183 A Magic Lamp(RMQ)
- HDU 3183 A Magic Lamp(贪心+RMQ)
- hdu 3183 A Magic Lamp(贪心,RMQ)
- hdu 3183 A Magic Lamp(RMQ)
- hdu 3183 A Magic Lamp (RMQ)
- HDU 3183--A Magic Lamp 【RMQ】
- HDU 3183 A Magic Lamp(RMQ)
- hdu 3183 A Magic Lamp rmq 贪心
- hdu 3183 A Magic Lamp (RMQ)
- Hdu 3183 A magic Lamp( RMQ问题)
- zstu 1032 拆分物品 再01背包
- poj 1384 完全背包
- poj 1252 完全背包
- poj 3468 A Simple Problem with Integers
- poj 2063 多次完全背包
- hdu 3183 RMQ
- nlogn 最长不下降子序列
- jquery checkbox多选最简单的写法
- poj 3260 hdu 3591 多重背包+完全背包
- poj 1742 多重背包可行性
- poj 2193 dp
- poj 2135 最小费用流
- poj 3070 快速幂 矩阵相乘
- poj 3905 2-sat