单调栈
单调栈查找左右较大值并记录位置
反向使用同理
#define int1 long long a[n+2]//1-n存放数据,0和n+1作为边界 stack<int1> zuo,you; zuo.push(0); you.push(n+1); int1 maxz[n+2],maxy[n+2]; for(int i=1;i<=n;i++){ while(a[i]>a[zuo.top()]) zuo.pop(); maxz[i]=zuo.top(); zuo.push(i); //寻找左侧较大值,并记录位置在maxz while(a[n-i+1]>=a[you.top()]) you.pop(); maxy[n-i+1]=you.top(); you.push(n-i+1); //寻找右侧较大值,并记录在maxy }

浙公网安备 33010602011771号