QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#792384#21403. 文艺平衡树RDFZchenyyWA 0ms3660kbC++141.9kb2024-11-29 09:45:032024-11-29 09:45:04

Judging History

你现在查看的是最新测评结果

  • [2024-11-29 09:45:04]
  • 评测
  • 测评结果:WA
  • 用时:0ms
  • 内存:3660kb
  • [2024-11-29 09:45:03]
  • 提交

answer

#include<bits/stdc++.h>

#define ls t[id].so[0]
#define rs t[id].so[1]

struct Node{
	int so[2];
	int rnd,val;
	int sz,rev;
};

#define MAXN 100005

int n,m,l,r;
int a[MAXN];
Node t[MAXN*10]; int nc=0;
int rt;

int nnode(int val){
	t[++nc].val=val;
	t[nc].rnd=rand();
	t[nc].so[0]=t[nc].so[1]=0;
	t[nc].sz=1;
	return nc;
}

void tag(int id){
	t[id].rev^=1;
	std::swap(ls,rs);
	return;
}
void pdown(int id){
	if(t[id].rev){
		tag(ls),tag(rs);
		t[id].rev=false; 
	}
	return;
}

void update(int id){
	t[id].sz=t[ls].sz+t[rs].sz+1;
	return;
}

int merge(int x,int y){
	if((!x)||(!y)) return (x+y);
	pdown(x),pdown(y);
	if(t[x].rnd<t[y].rnd){
		t[x].so[1]=merge(t[x].so[1],y),update(x);
		return x;
	}else{
		t[y].so[0]=merge(x,t[y].so[0]),update(y);
		return y;	
	}
}
void split(int id,int k,int& a,int& b){
	if((!id)){
		a=b=0;
		return;
	}
	int lsz=t[ls].sz;
	if(k<=lsz){
		b=id,split(t[id].so[0],k,a,t[id].so[0]);
	}else{
		a=id,split(t[id].so[1],k-lsz-1,t[id].so[1],b);
	}
	update(id);
	return;
}

void output(int id){
//	std::cout<<id<<' '; 
	if(!id) return;
	
//	std::cout<<"O"<<' '<<id<<' '<<ls<<' '<<rs<<'\n';
	
	pdown(id);
	output(ls);
	std::cout<<t[id].val<<' ';
	output(rs);
	
	return;
}

int main(){
	std::ios::sync_with_stdio(false);
	
	std::cin>>n>>m;
	for(int i=1;i<=n;i++) rt=merge(rt,nnode(i));
//	std::cout<<"RT"<<' '<<rt<<'\n'; 
//	for(int i=1;i<=n;i++){
//		std::cout<<t[i].so[0]<<' '<<t[i].so[1]<<'\n';
//		std::cout<<t[i].val<<'\n';
//	}
	for(int i=1;i<=m;i++){
		std::cin>>l>>r;
		int x,y,z;
		split(rt,r,y,z),split(y,l-1,x,y);
		tag(y);
		rt=merge(merge(x,y),z);
//		std::cout<<"RT"<<' '<<rt<<'\n';
		for(int i=1;i<=n;i++){
//			std::cout<<t[i].so[0]<<' '<<t[i].so[1]<<'\n';
//			std::cout<<t[i].val<<'\n';
//			std::cout<<t[i].rev<<'\n';
		}
	}
	output(rt);
	return 0;
}

詳細信息

Test #1:

score: 0
Wrong Answer
time: 0ms
memory: 3660kb

input:

30 5
7 26
7 18
5 9
4 15
3 15

output:

1 2 4 11 12 13 6 5 10 19 20 21 22 23 3 24 25 26 18 17 16 15 14 9 8 7 27 28 29 30 

result:

wrong answer 1st lines differ - expected: '1 2 4 17 16 15 6 5 18 19 20 21...4 13 12 11 10 9 8 7 27 28 29 30', found: '1 2 4 11 12 13 6 5 10 19 20 21... 17 16 15 14 9 8 7 27 28 29 30 '