【玄关】关于单调栈之10比6小
查看原帖
【玄关】关于单调栈之10比6小
716602
AKorz楼主2024/9/11 20:10
#include<bits/stdc++.h>
using namespace std;
#define N 100009
int n,m,u,v,dis[N],val[N],lst[N];
stack<int>stk;
void check()
{
	stack<int>tmp;
	while(!stk.empty())
	{
		printf("%d(%d) ",stk.top(),dis[stk.top()]);
		tmp.push(stk.top());
		stk.pop();
	}
	while(!tmp.empty()) stk.push(tmp.top()),tmp.pop();
	printf("\n");
}
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++) 
	{
		scanf("%d%d",&dis[i],&val[i]);
		if((!stk.empty())&&(dis[stk.top()]<dis[i])) 
		{
			printf("%d<%d\n",dis[stk.top()],dis[i]);
			lst[stk.top()]=i;
			stk.pop();
			check();
		}
		if(stk.empty()) printf("加入%d\n",dis[i]);
		else printf("%d比不过 加入%d\n",dis[stk.top()],dis[i]);
		stk.push(i);
		check();
	}
	while(!stk.empty()) lst[stk.top()]=0,stk.pop();
	for(int i=1;i<=n;i++) printf("%d ",lst[i]);
	return 0;
}

结果:

6 5
4 10
加入4
1(4)
6 8
4<6

加入6
2(6)
3 5
6比不过 加入3
3(3) 2(6)
4 14
3<4
2(6)
6比不过 加入4
4(4) 2(6)
10 9
4<10
2(6)
6比不过 加入10
5(10) 2(6)
4 20
10比不过 加入4
6(4) 5(10) 2(6)
2 0 4 5 0 0

为什么10比6小啊!!!

2024/9/11 20:10
加载中...