社区讨论

求助大神,为什么会RE

P1198[JSOI2008] 最大数参与者 3已保存回复 10

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
10 条
当前快照
1 份
快照标识符
@mi6m8c8p
此快照首次捕获于
2025/11/20 07:10
4 个月前
此快照最后确认于
2025/11/20 07:10
4 个月前
查看原帖
能过样例
CPP
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define clson ll, rr, l, mid, num << 1
#define crson ll, rr, mid + 1, r, num << 1 | 1
#define lson num << 1
#define rson num << 1 | 1 
using namespace std;
const int max_data = 200000;
long long tree[max_data << 2], lazy[max_data << 2];
long long maxn = -0x7fffffff;
int m;
long long mod;
template<class T>void read(T &x)
{
    int f = 0; x = 0; char ch = getchar();
    while(ch < '0' || ch > '9') f |= (ch == '-'), ch = getchar();
    while(ch >= '0' && ch <= '9') x = (x << 1) + (x << 3) + (ch ^ 48), ch = getchar();
    x = f? -x : x;
}
void write(long long x)
{
    if(x < 0) putchar('-'), x = -x;
    if(x > 9) write(x / 10);
    putchar(x % 10 + '0');
}
template<class T>T Max(T a, T b){return a > b? a : b;}
void upward(int num){tree[num] = Max(tree[lson], tree[rson]);}
void putdown(int l, int r, int num)
{
    int mid = ((l + r) >> 1);
    tree[lson] = Max(tree[lson], lazy[num]);
    tree[rson] = Max(tree[rson], lazy[num]);
    lazy[rson] = lazy[lson] = lazy[num];
    lazy[num] = -0x7fffffff;
}
void build(int ll, int rr, int l, int r, int num)
{
    lazy[num] = -0x7fffffff;
    if(l == r){tree[num] = -0x7fffffff; return;}
    int mid = ((l + r) >> 1);
    build(clson);
    build(crson);
    upward(num);
}
void add(long long k, int ll, int rr, int l, int r,int num)
{
    if(ll <= l && r <= rr)
      {
          tree[num] = Max(k, tree[num]);
          lazy[num] = Max(k, lazy[num]);
          return;
      }
    putdown(l, r, num);
    int mid = ((l + r) >> 1);
    if(ll <= mid) add(k, clson);
    if(rr > mid) add(k, crson);
    upward(num);
}
long long check(int ll, int rr, int l, int r, int num)
{
    if(ll <= l && r <= rr){maxn = Max(maxn, tree[num]); return maxn;}
    putdown(l, r, num);
    int mid = ((l + r) >> 1);
    if(ll <= mid) check(clson);
    if(rr > mid) check(crson);
    upward(num);
    return maxn;
}
int main()
{
    read(m);read(mod);
    build(1, 1, 1, m, 1);
    long long jl = 0;
    int size = 0;
    for(int i = 1; i <= m; i++)
      {
          char c; long long n;
          scanf("%c", &c);
          read(n);
          if(c == 'A')
            {
                  size++;
                  add((n + jl) % mod, size, size, 1, m, 1);
          }
        else
          {
              maxn = -0x7fffffff;
              jl = check(size - (int)n + 1, size, 1, m, 1);
              write(jl);
              putchar(10);
          }
      }
    return 0;
}

回复

10 条回复,欢迎继续交流。

正在加载回复...