从题目来分析,首先该题目有两个特别的性质,两边最近:多熟悉几次栈同学们就可以有着很明显的感觉,就是这道题要用到简单的数据结构的知识的知识第二个就是比他高,尝试带入单调性,所以显然,这道题考的就是单调栈的知识
运用到单调栈那么这道题就变得清晰了,分为两种情况:
1、如果下一座塔比当前栈顶的塔的高度低,那么当前栈顶就要吸收来的塔的能量
2、如果下一座塔比当前栈顶的塔的高度高,那么就破坏了当前的单调栈,所以一个while循环就要把之前比要来的塔的能量吸收掉
下面是我的代码:
#include <iostream>
#include <utility>
using namespace std;
const int N = 1e6 + 100;
pair<int,int> p[N];
int x,top,ans,n,m,b[N],s[N],a[N];
int main()
{
ios::sync_with_stdio(false);
cin >> n;
for(int i = 1; i <= n; i ++ )
cin >> a[i] >> b[i];
p[++ top].first = a[1];
p[top].second = 1;
for(int i = 2; i <= n; i &