求助 这是为什么RE 数组越界还是什么orz
  • 板块学术版
  • 楼主chunyangrong
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/25 17:42
  • 上次更新2023/11/25 17:43:59
查看原帖
求助 这是为什么RE 数组越界还是什么orz
1011598
chunyangrong楼主2023/11/25 17:42

记录

#include <bits/stdc++.h>
#include <stack>
#define N 400005
using namespace std;
int n, a[N], ans, f[N][21];
stack<int> s;
int main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin >> n;
	for(int i = 1; i <= n; i++)
		cin >> a[i];
	for(int i = 1; i <= n; i++)
		f[i][0] = i;
	for(int i = 1; i < 21; i++){
		for(int j = 1; j <= n; j++){
			if(a[f[i][j - 1]] <= a[f[i + (1 << (j - 1))][j - 1]])
				f[i][j] = f[i][j - 1];
			else
				f[i][j] = f[i + (1 << (j - 1))][j - 1];
		}
	}
	int maxx = a[n], minn = a[n], num = n;
	for(int i = n - 1; i > 0; i--){
		if(a[i] > maxx){
			int s = log2(num - i + 1);
			if(a[f[i][s]] <= a[f[num - (1 << s) + 1][s]])
				i = f[i][s];
			else
				i = f[num - (1 << s) + 1][s];
			ans++;
			i--;
			maxx = a[i], minn = a[i], num = i;
		}
		else
			if(a[i] < minn)
				minn = a[i];
		if(i == 1 && a[i] != minn){
			int s = log2(num - i + 1);
			if(a[f[i][s]] <= a[f[num - (1 << s) + 1][s]])
				i = f[i][s];
			else
				i = f[num - (1 << s) + 1][s];
			ans++;
			i--;
			maxx = a[i], minn = a[i], num = i;			
		}
	}
	cout << ans + 1;
	return 0;
}
2023/11/25 17:42
加载中...