首页 > 其他分享 >acwing 单调栈

acwing 单调栈

时间:2023-02-25 23:24:28浏览次数:30  
标签:数列 int tt 整数 stk -- 单调 acwing

原题

给定一个长度为 N 的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 -1。

输入格式

第一行包含整数 N,表示数列长度。

第二行包含 N 个整数,表示整数数列。

输出格式

共一行,包含 N 个整数,其中第 i 个数表示第 i 个数的左边第一个比它小的数,如果不存在则输出 -1。

数据范围

1≤N≤10^5

1≤数列中元素≤10^9

输入样例:

5
3 4 2 7 5

输出样例:

 -1 3 -1 2 2

题解

分析

如果i<j并且a[i]>a[j],那么a[i]就是可以被删除的,这也就是说我们需要维护一个单调递增的栈,tt是栈顶,如果stk[tt]比新数x大,那么就tt--,删除所有比x大的数,最后让x成为栈顶

代码

#include <iostream>
using namespace std;
const int N = 100010;
int stk[N], tt;

int main() {
    int n;
    cin >> n;
    while (n--) {
        int x;
        cin>>x;
        while (tt && stk[tt] >= x) tt--;
        if (tt) printf("%d ", stk[tt]);
        else printf("-1 ");
        stk[++tt] = x;
    }
}

标签:数列,int,tt,整数,stk,--,单调,acwing
From: https://www.cnblogs.com/ChengMao/p/17155695.html

相关文章

  • AcWing 第 92 场周赛 C题 4866. 最大数量 题解
    原题链接链表+并查集乱搞做法:思路首先可以发现,想要让度数尽量大,那我们应该构造成菊花图,即下图所示:对于每个需求,我们可以知道,如果之前他们没有连在一起,那我们一定得......
  • 刷刷刷 Day 37 | 738. 单调递增的数字
    738.单调递增的数字LeetCode题目要求当且仅当每个相邻位数上的数字 x 和 y 满足 x<=y 时,我们称这个整数是单调递增的。给定一个整数n,返回小于或等于n的最......
  • 2023.2.24AcWing蓝桥杯集训·每日一题
    今日复习的知识点为递归。递归对于笔者而言是个比较难以理解的知识点,后续会多进行递归题目的练习。AcWing1497.树的遍历题目描述一个二叉树,树中每个节点的权值互不相同......
  • 2023.2.25AcWing蓝桥杯集训·每日一题
    今日复习的知识点为并查集。AcWing1249.亲戚题目描述或许你并不知道,你的某个朋友是你的亲戚。他可能是你的曾祖父的外公的女婿的外甥女的表姐的孙子。如果能得到完整......
  • 「AcWing学习记录」Trie
    Trie:高效地存储和查找字符串集合的数据结构。AcWing835.Trie字符串统计原题链接#include<iostream>#include<algorithm>usingnamespacestd;constintN=1e......
  • ACwing——我在哪?
    题目描述农夫约翰出门沿着马路散步,但是他现在发现自己可能迷路了!沿路有一排共N个农场。不幸的是农场并没有编号,这使得约翰难以分辨他在这条路上所处的位置。然而,每个......
  • 「AcWing学习记录」KMP
    AcWing831.KMP字符串原题链接1.暴力算法怎么做chars[N],p[M];for(inti=1;i+m-1<=n;i++){boolflag=true;for(intj=1;j<=m;j++)......
  • Acwing 97
    Acwing97.约数之和题意求\(a^b\)的约数之和思路假设不考虑次方,只求a的约数之和,要怎么求呢?当遇到一个数b能被a整除时,假设当前答案为\(ans\),则应再加上\(ans*b\)。a......
  • Acwing 22
    classSolution{public:intfunc(vector<int>&nums,intbegin,intend){while(begin+1<end){intmid=begin+((end-begin)>>1);......
  • 2023.2.23AcWing蓝桥杯集训·每日一题
    今天练习的思维为递推。AcWing3777.砖块题目描述\(n\)个砖块排成一排,从左到右编号依次为\(1∼n\)。每个砖块要么是黑色的,要么是白色的。现在你可以进行以下操作若......