分类 zkw 下的文章

嗯嗯向我这种没智商的沙茶一定是会打残代码的。
同一个名称就不要乱用了啊(die。
或许说太久没打zkw忘了怎么打还是得翻以前的代码……
一言以蔽之,曰智商低。

#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 2e5;
namespace FastIO
{
    template<class T>
    void read(T& x)
    {
        char ch = getchar(); T n = 1, a = 0;
        while(ch < '0' || ch > '9'){if(ch == '-') n = -1; ch = getchar();}
        while(ch >= '0' && ch <= '9'){a = a * 10 + ch - '0'; ch = getchar();}
        x = n * a;
    }
    template<class T, class U>
    void read(T& x, U& y)
    {
        read(x), read(y);
    }
}
using namespace FastIO;

struct info
{
    int ma;
    info(int x = 0) : ma(x){}
} A[maxn * 3];

int main()
{
    int m, d;
    read(m, d);
    int t = 0, cur = 0;
    int zkwt = 1;
    while(zkwt <= maxn + 3) zkwt <<= 1;
    while(m--)
    {
        char a[2];int n;
        scanf("%s", a);
        read(n);
        if(a[0] == 'A')
        {
            int i;
            for(A[i = cur + zkwt + 1] = info((n + t) % d), i >>= 1; i > 0; i >>= 1)
                A[i].ma = max(A[i * 2].ma, A[i * 2 + 1].ma); 
            cur++;
        }
        else
        {
            int ans = 0;
            for(int l = cur - n + zkwt, r = cur + zkwt + 1; l ^ r ^ 1; l >>= 1, r >>= 1)
            {
                if(~l & 1)
                    ans = max(ans, A[l ^ 1].ma);
                if(r & 1)
                    ans = max(ans, A[r ^ 1].ma);
            }
            printf("%d\n", t = ans);
        }
    }
    return 0;
}

tagged-zkw.
稍后做一个教程。

namespace DEL
{
    const int INF = 1e9, maxn = 1 << 25;
    struct info
    {
        int Max;
        info(int x = -INF) : Max(x){}
    } A[maxn];
}
#include <cstdio>
#include <algorithm>
using namespace std;
using namespace DEL;
int main()
{
    int n, m;
    while(~scanf("%d%d", &n, &m))
    {
        int t;
        for(t = 1; t <= n + 3; t <<= 1);
        for(int i = t + 1; i < t + 1 + n; i++)
        {
            int a;
            scanf("%d", &a);
            A[i] = info(a);
        }
        for(int i = t - 1; i > 0; i--)
            A[i].Max = max(A[i * 2].Max, A[i * 2 + 1].Max);
        while(m--)
        {
            static char c[maxn];int x, y;
            scanf("%s%d%d", &c, &x, &y);
            if(c[0] == 'Q')
            {
                int ans = 0;
                for(x += t - 1, y += t + 1; x ^ y ^ 1; x >>= 1, y >>= 1)
                {
                    if(~x & 1)
                        ans = max(ans, A[x ^ 1].Max);
                    if(y & 1)
                        ans = max(ans, A[y ^ 1].Max);
                }
                printf("%d\n", ans);
            }
            else
            {
                for(A[x += t] = info(y), x >>= 1; x > 0; x >>= 1)
                    A[x].Max = max(A[x * 2].Max, A[x * 2 + 1].Max);
            }
        }
    }
    return 0;
}