社区讨论
发现了一种O(n)的单调栈算法
学术版参与者 9已保存回复 9
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 9 条
- 当前快照
- 1 份
- 快照标识符
- @m65s255j
- 此快照首次捕获于
- 2025/01/21 09:09 去年
- 此快照最后确认于
- 2025/11/04 11:10 4 个月前
发现了一种的单调栈算法。
记录一个数组,表示右边第一个大于这个位置的数的位置,那么我们分两种情况讨论:
记录一个数组,表示右边第一个大于这个位置的数的位置,那么我们分两种情况讨论:
求大佬证实/伪(洛谷题目单调栈模板已通过)
CPP#include <bits/stdc++.h>
using namespace std;
long long last[3000005] , a[3000005];
int main ()
{
ios :: sync_with_stdio (false);
cin.tie (0);
cout.tie (0);
int n;
cin >> n;
for (int i = 1;i <= n;i ++) cin >> a[i];
for (int i = n - 1;i >= 1;i --)
if (a[i] < a[i + 1]) last[i] = i + 1;
else
{
int j = last[i + 1];
while (j && a[j] < a[i]) j = last[j];
last[i] = j;
}
for (int i = 1;i <= n;i ++) cout << last[i] << " ";
}
回复
共 9 条回复,欢迎继续交流。
正在加载回复...