我不理解为什么namespace在我的电脑上能正常运行,到洛谷就RE; 题目:P1198 [JSOI2008] 最大数 我的代码:
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 200010;
int m , p , cnt , last;
namespace SFT{
struct Node{
int l , r;
int maxn;
}tr[N << 2];
void pushup(int u){
tr[u].maxn = max(tr[u << 1].maxn , tr[u << 1 | 1].maxn);
}
void build(int u , int l , int r){
tr[u].l = l , tr[u].r = r;
if(l == r) return ;
int mid = l + r >> 1;
build(u << 1 , l , mid);
build(u << 1 | 1 , mid + 1 , r);
}
void modify(int u , int x , int k){
if(tr[u].l == x && tr[u].r == x){
tr[u].maxn = k;
return ;
}
else{
int mid = tr[u].l + tr[u].r >> 1;
if(x <= mid) modify(u << 1 , x , k);
else modify(u << 1 | 1 , x , k);
pushup(u);
}
}
int query(int u , int l , int r){
if(tr[u].l >= l && tr[u].r <= r) return tr[u].maxn;
int mid = tr[u].l + tr[u].r >> 1;
int maxval = 0;
if(r <= mid) maxval = query(u << 1 , l , r);
else if(l > mid) maxval = query(u << 1 | 1 , l , r);
else maxval = max(max(maxval , query(u << 1 , l , mid)) , query(u << 1 | 1 , mid + 1 , r));
}
}
using namespace SFT;
int main(){
scanf("%d%d" , &m , &p);
build(1 , 1 , m);
while(m--){
char opt;
cin >> opt;
if(opt == 'A'){
int x;
scanf("%d" , &x);
modify(1 , cnt + 1 , (last + x) % p);
cnt++;
}
else{
int x;
scanf("%d" , &x);
last = query(1 , cnt - x + 1 , cnt);
printf("%d\n" , last);
}
}
return 0;
}