這是noip2016的前一天上午,我還是高一的學弟。這次考試結束后,一大批學長就要告別機房,告別高中與代碼為伴的時代,告別我們這群整天很能鬧騰的學弟學妹們。
我讓正值高三的親愛的大神學長ylf給我份st表的代碼,他讓我看他博客,我看不懂,於是就有了以下對話。。。。。。
發往: 閆立峰 ( /wjs6-31)(飛鴿傳書)
時間: 2016-11-18 星期五 10:19:35 (RSA)(封裝)
-------------------------------------
me:那時候的你是不是還年輕啊?代碼寫的這么惡心看不懂。。。
he:......
me:恩恩 一定是的
me:我是看着你長大的,猶記得你高一的時后還是個小孩啥也不懂,還是偉大的我把你帶如了OI的大門,從此你一發不可收拾,成為了眾所周知的廣饒一中ylf大神!!!
he:哎呀你快省省吧 我現在打一份ST表吧
me:╮(╯▽╰)╭這就對了嘛 這才是標准模范好學長啦啦啦!
唉,這么快就要分別了,好舍不得他呀。忘不了他對我的幫助,忘不了他對我們那些鼓勵的話。
學哥,加油,你一定可以的,你一定能考上自己心儀的大學!!
以后,不知道你是否會忘記我,但我知道你是我心中最善良的學哥。
學弟在這里默默祝福你了~~~
LRH
2016 11.18
附:不得不加的st表代碼
#include<cstdio>
#include<cstring>
#define maxn 50010
using namespace std;
int n,m,a[maxn],A[maxn][25],B[maxn][25],p[maxn];
int init(){
int x=0,f=1;char s=getchar();
while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();}
return x*f;
}
int max(int x,int y){
return x>y?x:y;
}
int min(int x,int y){
return x<y?x:y;
}
void ST(){
memset(A,-127/3,sizeof(A));
memset(B,127/3,sizeof(B));
for(int i=1;i<=n;i++)
A[i][0]=B[i][0]=a[i];
for(int j=1;j<=20;j++)
for(int i=1;i+(1<<j)-1<=n;i++){
A[i][j]=max(A[i][j-1],A[i+(1<<j-1)][j-1]);
B[i][j]=min(B[i][j-1],B[i+(1<<j-1)][j-1]);
}
for(int i=1;i<=n;i++)
for(int j=0;j<=20;j++)
if((1<<j)>i){
p[i]=j-1;break;
}
}
int QueryA(int l,int r){
int k=p[r-l+1];
return max(A[l][k],A[r-(1<<k)+1][k]);
}
int QueryB(int l,int r){
int k=p[r-l+1];
return min(B[l][k],B[r-(1<<k)+1][k]);
}
int main()
{
n=init();m=init();
for(int i=1;i<=n;i++)
a[i]=init();
ST();while(m--){
int l=init();
int r=init();
printf("%d\n",QueryA(l,r)-QueryB(l,r));
}
return 0;
}
http://www.cnblogs.com/yanlifneg/