TLE on #2 #12 求助
查看原帖
TLE on #2 #12 求助
760535
Java_Herobrine楼主2023/3/7 13:04
#include<bits/stdc++.h>
using namespace std;
streambuf* inbuf;
struct SegmentTreeNode{
	SegmentTreeNode* left=nullptr;
	SegmentTreeNode* right=nullptr;
	int value,l,r;
	SegmentTreeNode(int i,int j){
		value=i;
		l=j;
		r=j;
	}
	SegmentTreeNode(){
		value=0;
		l=0;
		r=0;
	}
	SegmentTreeNode(vector<int>& sequence){
		build(1,sequence.size(),sequence);
	}
	SegmentTreeNode* modify(int index,int mod){
		if(l==r){
			return new SegmentTreeNode{mod,index};
		}
		int mid=(l+r)>>1;
		SegmentTreeNode* ptr=new SegmentTreeNode;
		ptr->l=l;
		ptr->r=r;
		if(index<=mid){
			ptr->left=left->modify(index,mod);
			ptr->right=right;
		}else{
			ptr->right=right->modify(index,mod);
			ptr->left=left;
		}
		return ptr;
	}
	int query(int index){
		if(l==r){
			return value;
		}
		int mid=(l+r)>>1;
		if(index<=mid){
			return left->query(index);
		}else{
			return right->query(index);
		}
	}
private:
	void build(int l,int r,vector<int>& sequence){
		this->l=l;
		this->r=r;
		if(l==r){
			value=sequence[l-1];
			return;
		}
		int mid=(l+r)>>1;
		left=new SegmentTreeNode;
		right=new SegmentTreeNode;
		left->build(l,mid,sequence);
		right->build(mid+1,r,sequence);
	}
};
int qr(){
	char ch=inbuf->sbumpc();
	bool sign=1;
	int abs=0;
	while(ch>'9'||ch<'0'){
		if(ch=='-'){
			sign=0;
		}
		ch=inbuf->sbumpc();
	}
	while(ch<='9'&&ch>='0'){
		abs=(abs<<3)+(abs<<1)+(ch^48);
		ch=inbuf->sbumpc();
	}
	return sign?abs:-abs;
}
vector<SegmentTreeNode*> version;
int main(){
	version.reserve(19198100);
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	inbuf=cin.rdbuf();
	int N{qr()},M{qr()};
	vector<int> sequence(N);
	for(int i=0;i<N;i++){
		sequence[i]=qr();
	}
	version.push_back(new SegmentTreeNode{sequence});
	while(M--){
		int vi{qr()},op{qr()};
		if(op==1){
			int loc{qr()},value{qr()};
			version.push_back(version[vi]->modify(loc,value));
		}else{
			int loc{qr()};
			cout<<version[vi]->query(loc)<<"\n";
			version.push_back(version[vi]);
		}
	}
}

萌新刚学OI,用的指针实现可持久化线段树,T飞两个点,求助

2023/3/7 13:04
加载中...