为何此代码交上去 85 分,剩下的点全 UKE 了?(疑惑
代码:
#include<bits/stdc++.h>
#define int long long
#define trl tr[p].l
#define trr tr[p].r
using namespace std;
const int N=500005;
char a[N];
int n,m,op,l,r;
struct B{
int cd,qz,hz;
};
struct xd_tree{
struct A{
int l,r,lz;
int cd,qz,hz;
int cd2,qz2,hz2;
}tr[N<<2];
void makelazy(int p){
tr[p].lz=1-tr[p].lz;
swap(tr[p].cd,tr[p].cd2),swap(tr[p].qz,tr[p].qz2),swap(tr[p].hz,tr[p].hz2);
}
void pushdown(int p){
if(!tr[p].lz)return;
makelazy(p<<1);
makelazy(p<<1|1);
tr[p].lz=0;
}
void pushup(int p){
int tmp=min(tr[p<<1].qz,tr[p<<1|1].hz);
tr[p].cd=tr[p<<1].cd+tr[p<<1|1].cd+2*tmp;
tr[p].qz=tr[p<<1].qz+tr[p<<1|1].qz-tmp;
tr[p].hz=tr[p<<1].hz+tr[p<<1|1].hz-tmp;
tmp=min(tr[p<<1].qz2,tr[p<<1|1].hz2);
tr[p].cd2=tr[p<<1].cd2+tr[p<<1|1].cd2+2*tmp;
tr[p].qz2=tr[p<<1].qz2+tr[p<<1|1].qz2-tmp;
tr[p].hz2=tr[p<<1].hz2+tr[p<<1|1].hz2-tmp;
}
void build(int p,int l,int r){
trl=l,trr=r,tr[p].lz=0;
if(l==r){
tr[p].cd=tr[p].cd2=0;
if(a[l]=='(')tr[p].qz=tr[p].hz2=1,tr[p].hz=tr[p].qz2=0;
else tr[p].hz=tr[p].qz2=1,tr[p].qz=tr[p].hz2=0;
return;
}
int mid=(l+r)/2;
build(p<<1,l,mid),build(p<<1|1,mid+1,r);
pushup(p);
}
void change(int p,int l,int r){
if(l>trr||r<trl)return;
if(l<=trl&&trr<=r){
makelazy(p);
return;
}
pushdown(p);
change(p<<1,l,r),change(p<<1|1,l,r);
pushup(p);
}
B search(int p,int l,int r){
if(l>trr||r<trl)return {-1,-1,-1};
if(l<=trl&&trr<=r){
return {tr[p].cd,tr[p].qz,tr[p].hz};
}
pushdown(p);
B tmp=search(p<<1,l,r),tmp2=search(p<<1|1,l,r),ret;
if(tmp.cd==-1&&tmp2.cd==-1)return {-1,-1,-1};
else if(tmp.cd==-1)return tmp2;
else if(tmp2.cd==-1)return tmp;
int tmp3=min(tmp.qz,tmp2.hz);
ret.cd=tmp.cd+tmp2.cd+2*tmp3;
ret.qz=tmp.qz+tmp2.qz-tmp3;
ret.hz=tmp.hz+tmp2.hz-tmp3;
return ret;
}
}tr;
signed main(){
//freopen("sample1.in","r",stdin);
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
tr.build(1,1,n);
cin>>m;
while(m--){
cin>>op>>l>>r;
if(op==1)tr.change(1,l,r);
else cout<<tr.search(1,l,r).cd/2<<"\n";
}
return 0;
}
而且我此份代码交了4次,每次分别为 85,75,80,60 分?
75分那一次还有一个点WA了。开盲盒哪。。。
求助,玄关。