PPMM

Posted leiyuanze

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PPMM相关的知识,希望对你有一定的参考价值。

代码

#include<cstdio>
using namespace std;

const int N = 1000000 , INF = 2e9;
int n , m , x , head = 1 , tail , p , s;
char opt[5];

inline int read()
{
    char ch = getchar();
    int res = 0 , f = 1;
    for(; ch < '0' || ch > '9'; ch = getchar()) if (ch == '-') f = -f;
    for(; ch >= '0' && ch <= '9'; ch = getchar()) res = (res << 3) + (res << 1) + ch - '0';
    return res * f;
}

inline int my_m(int x , int y , int o)
{
    if (!o) return x > y ? x : y;
    if (o) return x < y ? x : y;
}

struct tree{
    int top;
    int tr[(N << 2) + 5][3];
    inline void change(int l , int r , int k , int x , int v)
    {
        if (l == r && l == x)
        {
            tr[k][0] = tr[k][1] = v;
            return;
        }
        int mid = (l + r) >> 1;
        if (x <= mid) change(l , mid , k << 1 , x , v);
        else change(mid + 1 , r , k << 1 | 1 , x , v);
        tr[k][0] = my_m(tr[k << 1][0] , tr[k << 1 | 1][0] , 0);//Max
        tr[k][1] = my_m(tr[k << 1][1] , tr[k << 1 | 1][1] , 1);//Min
    }
    inline int query(int l , int r , int k , int x , int y , int o) 
    {
        if (l >= x && r <= y) return tr[k][o];
        int mid = (l + r) >> 1 , res = INF;
        if (!o) res = -res;
        if (x <= mid) res = my_m(res , query(l , mid , k << 1 , x , y , o) , o);
        if (y > mid) res = my_m(res , query(mid + 1 , r , k << 1 | 1 , x , y , o) , o);
        return res; 
    }
}f;

int main()
{
//  freopen("PPMM.in" , "r" , stdin);
//  freopen("PPMM.out" , "w" , stdout);
    n = read();
    m = n;
    while (m--)
    {
        opt[1] = getchar();
        while (opt[1] != 'P' && opt[1] != 'M') opt[1] = getchar();
        opt[2] = getchar() , opt[3] = getchar();;
        if (opt[1] == 'P' && opt[2] == 'U') 
        {
            x = read();
            if (p == 1) x = -x;
            tail++ , s++;
            f.change(1 , n , 1 , tail , x);
        }
        if (s == 0) continue;
        if (opt[1] == 'P' && opt[2] == 'O') head++ , s--;
        else if (opt[1] == 'M' && opt[2] == 'I') p ^= 1;
        else
        if (opt[1] == 'M' && opt[2] == 'A')
        {
            if (p == 0) printf("%d
" , f.query(1 , n , 1 , head , tail , 0));//Max
            else printf("%d
" , -1 * f.query(1 , n , 1 , head , tail , 1));//Min
        }
    }
}

以上是关于PPMM的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序代码片段

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VSCode自定义代码片段——.vue文件的模板

VSCode自定义代码片段6——CSS选择器