7月备忘 习题/算法总结

upd0 at july 15
bellman-ford都写错,故开始总结七月所学
今夜天朗气清,惠风和畅
1.二分
使用情景:logn 复杂度查找
l下界 r 上界
写法一(r可取)

while(l<=r)
mid=l+(r-l)/2; //防爆
if(judge)l=mid+1;
else r=mid-1;

写法二(r在界外)

while(l<r)
mid=l+(r-l)/2;
if(judge)l=mid+1;
else r=mid;

2.ST表
使用情景 RMQ 不能n^2暴力解决时nlogn处理
数列arr在[l,r]间最大/小值

建立数组arr[MAX_N][log2(长度)]

int arr[max_n][m];
int ql,qr,ans;
for(int i=1;i<=n;i++)cin>>arr[i][0];
for(int i=1;i<=m;i++)
	for(int j=1;j+(1<<i)-1<=n;j++)
		arr[i][j]=max(arr[j][i-1],arr[j+(1<<(i-1))][j-1];
int k=log2(qr-ql+1);
ans=max/min(arr[l][k],arr[r-(1<<k)+1][k]);

你可能感兴趣的:(7月备忘 习题/算法总结)