求大佬帮忙看看
查看原帖
求大佬帮忙看看
362762
lzyzs楼主2023/8/6 19:12

提交记录为什么会re mle我可以理解 re是为什么```cpp #include <bits/stdc++.h> #define aili Ai_li_xi_ya #define ll long long #define ull unsigned long long using namespace std; const int N=200020; const int mod=998244353; inline ll read() { char ch=getchar(); ll s=0,w=1; while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();} while(ch>='0'&&ch<='9'){s=s10+ch-'0';ch=getchar();} return sw; } int n,m; struct edge{ int l,r,maxx; int ls,rs; priority_queue yuanshen; }tr[N4+20]; vector mark[N4+20]; vector mark2[N*4+20]; int id; void build(int k,int l,int r) { tr[k].l=l,tr[k].r=r; tr[k].ls=k<<1,tr[k].rs=k<<1|1; if(l==r) return; int mid=(l+r)>>1; build(tr[k].ls,l,mid); build(tr[k].rs,mid+1,r); } void pudown(int index) { if(!mark[index].size())return; for(int i=0;i<mark[index].size();i++) { if(tr[tr[index].ls].l!=tr[tr[index].ls].r) { mark[tr[index].ls].push_back(mark[index][i]); tr[tr[index].ls].maxx=max(tr[tr[index].ls].maxx,mark[index][i]); }else{ for(int i=0;i<mark[index].size();i++) tr[tr[index].ls].yuanshen.push(mark[index][i]); tr[tr[index].ls].maxx=tr[tr[index].ls].yuanshen.top(); } if(tr[tr[index].rs].l!=tr[tr[index].rs].r) { mark[tr[index].rs].push_back(mark[index][i]); tr[tr[index].rs].maxx=max(tr[tr[index].rs].maxx,mark[index][i]); }else{ for(int i=0;i<mark[index].size();i++) tr[tr[index].rs].yuanshen.push(mark[index][i]); tr[tr[index].rs].maxx=tr[tr[index].rs].yuanshen.top(); } } tr[index].maxx=max(tr[tr[index].ls].maxx,tr[tr[index].rs].maxx); mark[index].clear(); } void add(int k,int l,int r,int z) { if(tr[k].l==tr[k].r) { tr[k].maxx=max(tr[k].maxx,z); return void(tr[k].yuanshen.push(z)); } pudown(k); if(l<=tr[k].l&&tr[k].r<=r) { mark[k].push_back(z); tr[k].maxx=max(tr[k].maxx,z); return; } int mid=(tr[k].l+tr[k].r)>>1; if(mid>=l)add(tr[k].ls,l,r,z); if(mid<r) add(tr[k].rs,l,r,z); tr[k].maxx=max(tr[tr[k].ls].maxx,tr[tr[k].rs].maxx); } int query(int k,int l,int r) { // cout << k << endl; int ans=0; if(l<=tr[k].l&&tr[k].r<=r) return tr[k].maxx; pudown(k); int mid=(tr[k].l+tr[k].r)>>1; if(mid>=l)ans=max(ans,query(tr[k].ls,l,r)); if(mid<r) ans=max(ans,query(tr[k].rs,l,r)); return ans; } void sub(int k,int l,int r,int z) { if(tr[k].maxx<z) return; if(tr[k].l==tr[k].r) { while(!tr[k].yuanshen.empty()&&tr[k].yuanshen.top()==z) { tr[k].yuanshen.pop(); } if(tr[k].yuanshen.empty()) tr[k].maxx=0; else tr[k].maxx=tr[k].yuanshen.top(); return; } pudown(k); int mid=(tr[k].l+tr[k].r)>>1; if(mid>=l)sub(tr[k].ls,l,r,z); if(mid<r) sub(tr[k].rs,l,r,z); } int Ai_li_xi_ya(int k,int l,int r) { int ok=query(1,l,r); sub(1,l,r,ok); } int main() { cin >> n >> m; build(1,1,n); int op,l,r; while(m--) { cin >> op >> l >> r; if(op==1) add(1,l,r,read()); else if(op==2) aili(1,l,r); else cout << query(1,l,r) << endl; } return 0; }

样例都过了
2023/8/6 19:12
加载中...