社区讨论
MLE是什么意思?
P3391【模板】文艺平衡树参与者 3已保存回复 6
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 6 条
- 当前快照
- 1 份
- 快照标识符
- @lzcgibkk
- 此快照首次捕获于
- 2024/08/02 16:42 2 年前
- 此快照最后确认于
- 2024/08/02 17:46 2 年前
本人用的是FHQ-Treap,代码如下:
CPP#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,m,rt,p,l,r;
struct FHQ{
int l,r;
int key,val;
int siz,tag;
}tr[N];
void add(int x){
tr[x].val=x;
tr[x].siz=1;
tr[x].key=rand();
tr[x].l=tr[x].r=0;
}
void push_down(int p){
if(tr[p].tag){
swap(tr[p].l,tr[p].r);
tr[tr[p].l].tag^=1;
tr[tr[p].r].tag^=1;
tr[p].tag=0;
}
}
void push_up(int p){
tr[p].siz=tr[tr[p].l].siz+tr[tr[p].r].siz+1;
}
void split(int p,int x,int &l,int &r){
if(!p){
l=r=0;
return;
}
push_down(p);
if(tr[tr[p].l].siz+1<=x){
l=p;
split(tr[p].r,x-tr[tr[p].l].siz-1,tr[p].r,r);
}else{
r=p;
split(tr[p].l,x,l,tr[p].l);
}
push_up(p);
}
int merge(int l,int r){
if(!l||!r){
return l+r;
}
if(tr[l].key<tr[r].key){
push_down(l);
tr[l].r=merge(tr[l].r,r);
push_up(l);
return l;
}else{
push_down(r);
tr[r].l=merge(l,tr[r].l);
push_up(r);
return r;
}
}
void print(int u){
push_down(u);
if(tr[u].l)print(tr[u].l);
cout<<tr[u].val<<' ';
if(tr[u].r)print(tr[u].r);
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
add(i);
rt=merge(rt,i);
}
while(m--){
int x,y;
cin>>x>>y;
split(rt,y,l,r);
split(rt,x-1,l,p);
tr[p].tag^=1;
rt=merge(merge(l,p),r);
}
print(rt);
return 0;
}
为什么会MLE啊啊啊啊啊啊啊啊?
悬两关,求条
回复
共 6 条回复,欢迎继续交流。
正在加载回复...