Pila monotónica

Pila monotónica

Pila monotónica

Tipo de pregunta común: dada una secuencia, en el lado izquierdo de cada secuencia, donde está el número más cercano más grande o más pequeño que él.

#include <iostream>
#include <vector>
using namespace std;

const int N = 1e5 + 10;
int n;

int stk[N], tt;

int main()
{
    
    
    cin >> n;
    for(int i = 0; i < n; i ++)
    {
    
    
        int x;
        cin >> x;
        while(tt && stk[tt] >= x) tt--;
        if(tt) cout << stk[tt] << ' ';
        else cout << -1 << ' ';
        stk[++ tt] = x;
    }
}

Cola monótona

Use la ventana deslizante para encontrar el valor mínimo en la secuencia

#include <iostream>
#include <vector>
using namespace std;

const int N = 1e5 + 10;
int n;
int a[N], q[N];
int k;
int main()
{
    
    
    cin >> n >> k;
    for(int i = 0; i < n; i ++) cin >> a[i];
    int hh = 0, tt = -1;
    for(int i = 0; i < n; i ++)
    {
    
    
        //判断队头是否已经滑出窗口
        if(hh <= tt && i - k + 1 > q[hh]) hh ++; 
        while(hh <= tt && a[q[tt]] >= a[i]) tt --;
        q[++ tt] = i;
        if(i >= k - 1) cout << a[q[hh]] << ' ';
    }
    cout << endl;
}

Supongo que te gusta

Origin blog.csdn.net/qq_47783181/article/details/112873149
Recomendado
Clasificación