全 TLE 求助 线段树+线性基模板题
查看原帖
全 TLE 求助 线段树+线性基模板题
246331
mystic_qwq楼主2024/4/21 22:16

样例都过了的,基本上和第一篇题解一样。求助大佬

#include<bits/stdc++.h>
using namespace std; 
const int N=5e4+1;
struct seg{
#define rep for(int i=31;~i;--i)
  int a[32];
  int ask(){
    int res=0;
    rep if((a[i]^res)>res) res^=a[i];
    return res;
  }
  friend seg operator-(seg a,int x){
    rep if(x>>i&1){
      if(a.a[i]) x^=a.a[i];
      else{a.a[i]=x;return a;}
    }
  }
} p[N<<3];

seg operator+(seg a,seg b){
  rep if(b.a[i]) a=a-b.a[i];
  return a;
}

#define TREE int h,int l,int r,int x,int y
#define ls h<<1
#define rs ls|1
#define mid (l+r>>1)
#define Lson ls,l,mid,x,y
#define Rson rs,mid+1,r,x,y
void modify(TREE){
  p[h]=p[h]-y; if(l==r) return;
  if(x<=mid) modify(Lson);
  else modify(Rson);
}
seg query(TREE){
  if(x<=l&&r<=y) return p[h];
  if(y<=mid) return query(Lson);
  if(x>mid) return query(Rson);
  return query(Lson)+query(Rson);
}
main(){
  cin.tie(0)->sync_with_stdio(0);
  int n,m; cin>>n>>m;
  for(int u,v,w;n--;){
    cin>>u>>v>>w;
    if(u==1) modify(1,1,m,v,w);
    else cout<<query(1,1,m,v,w).ask()<<'\n';
  }
}
2024/4/21 22:16
加载中...