常数炸掉玄关求调
查看原帖
常数炸掉玄关求调
780535
Tree_Chtholly楼主2024/7/27 20:11
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll a[1000001];
ll read()
{
    bool flag=0;
    char ch=getchar();
    ll ans=0;
    while(!isdigit(ch) && ~ch)
    {
        flag|=(ch=='-');
        ch=getchar();
    }
    while(isdigit(ch) && ~ch)
    {
        ans=(ans<<1)+(ans<<3)+(ch^48);
        ch=getchar();
    }
    return flag ? -ans : ans;
}

int _c[100];
void write(ll x)
{
    int i=0;
    bool flag=0;
    if(x<0) {x=-x;putchar('-');}
    if(x==0) putchar('0');
    while(x) {_c[++i]=x%10;x/=10;}
    while(i) {putchar(_c[i--]^48);}
}
struct node{
	ll v,lc,rc,lt,rt;
};
ll trsz=-1;
node tree[40000000];
vector<ll> root;
ll build_first(ll l,ll r){
	node temp;
	trsz++;
	tree[trsz]=temp;
	ll ret;
	
	
	ret=trsz;
	tree[ret].lt=l;
	tree[ret].rt=r;
	if(l==r){
		tree[ret].v=a[l];
		return ret;
	}
	
	tree[ret].lc=build_first(l,(l+r)/2);
	tree[ret].rc=build_first((l+r)/2+1,r);
	return ret;
}
ll vis(ll k,ll now){
	if(tree[now].lt!=tree[now].rt){
		if(k<=tree[tree[now].lc].rt){
			return vis(k,tree[now].lc);
		}
		else{
			return vis(k,tree[now].rc);
		}
	}
	else{
		return tree[now].v;
	}
	
}
void change(ll former,ll now,ll k,ll nv){
	if(tree[now].lt==tree[now].rt){
		tree[now].v=nv;
		return ;
	}
	else{
		if(k<=(tree[now].lt+tree[now].rt)/2){
			tree[now].rc=tree[former].rc;
			node t1;
			t1=tree[tree[former].lc];
			trsz++;
			tree[trsz]=t1;
			tree[now].lc=trsz;
			change(tree[former].lc,tree[now].lc,k,nv);
		}
		else{
			tree[now].lc=tree[former].lc;
			node t1;
			t1=tree[tree[former].rc];
			trsz++;
			tree[trsz]=t1;
			tree[now].rc=trsz;
			change(tree[former].rc,tree[now].rc,k,nv);
		}
	}
}
int main(){
	ll n,m,t1,t2,t3,t4;
	n=read();
	m=read();
	for(ll i=0;i<n;i++){
		a[i]=read();
	}
	ll trash=build_first(0,n-1);
	root.push_back(0);
	for(;m;m--){
		t1=read();
		t2=read();
		if(t2==1){
			cin>>t3>>t4;
			trsz++;
			tree[trsz]=tree[root[t1]];
			root.push_back(trsz);
			change(root[t1],root[root.size()-1],t3-1,t4);
		}
		else{
			cin>>t3;
			trsz++;
			tree[trsz]=tree[root[t1]];
			root.push_back(trsz);
			write(vis(t3-1,root[t1]));
			putchar('\n');
		} 
	}

}
2024/7/27 20:11
加载中...