最大最小表示法模板
/* 我对这个算法的理解是意淫出来的,没有详细严谨的证明 ,所以只把重要的地方注释了一下 */ int getMin(){ int i=0,j=1,k=0; while(i<len&&j<len&&k<len){ int t=T[(i+k)%len]-T[(j+k)%len]; if(t==0) k++; else{ if(t>0) i+=k+1;//从T[i->i+k+1]开头的不会比之前的小,之前所比较的都是相等的; else j+=k+1; if(i==j) j++; k=0; } } return min(i,j); } int getMax(){ int i=0,j=1,k=0; while(i<len&&j<len&&k<len){ int t=T[(i+k)%len]-T[(j+k)%len]; if(t==0) k++; else{ if(t>0) j+=k+1; else i+=k+1; if(i==j) j++; k=0; } } return min(i,j); } int getMin(){ int i=0,j=1,k=0; while(i<len&&j<len&&k<len){ int t=T[(i+k)%len]-T[(j+k)%len]; if(t==0) k++; else{ if(t>0) i+=k+1; else j+=k+1; if(i==j) j++; k=0; } } return min(i,j); } int getMax(){ int i=0,j=1,k=0; while(i<len&&j<len&&k<len){ int t=T[(i+k)%len]-T[(j+k)%len]; if(t==0) k++; else{ if(t>0) j+=k+1; else i+=k+1; if(i==j) j++; k=0; } } return min(i,j); }