16pts 求调
查看原帖
16pts 求调
289296
zymooll楼主2023/4/25 21:49

WA on 除 Subtask #0

// Author:zymooll

#include<bits/stdc++.h>
#define getchar getchar_unlocked
#define putchar putchar_unlocked
#define int long long
using namespace std;
int read(){
	int s=0,w=1;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-')w=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		s=s*10+c-'0';
		c=getchar();
	}
	return s*w;
}
void print(int x){
	if(x<0){
		putchar('-');
		x=-x;
	}
	if(x>=10)print(x/10);
	putchar(x%10+'0');
	return;
}
struct Node{
    int l,r,n;
}t[30000010];
int n,m,ncnt;
int a[1000010];
int root[1000010];
int clone(int p){
    t[++ncnt]=t[p];
    return p;
}
int build(int p,int l,int r){
    p=++ncnt;
    if(l==r){
        t[p].n=a[l];
        return p;
    }
    int mid=(l+r)/2;
    t[p].l=build(t[p].l,l,mid);
    t[p].r=build(t[p].r,mid+1,r);
    return p;
}
int modify(int p,int l,int r,int x,int k){
    p=clone(p);
    if(l==r){
        t[p].n=k;
        return p;
    }
    int mid=(l+r)/2;
    if(x<=mid)t[p].l=modify(t[p].l,l,mid,x,k);
    else t[p].r=modify(t[p].r,mid+1,r,x,k);
    return p;
}
int ask(int p,int l,int r,int x){
    if(l==r){
        return t[p].n;
    }
    int mid=(l+r)/2;
    if(x<=mid)return ask(t[p].l,l,mid,x);
    else return ask(t[p].r,mid+1,r,x);
}
signed main(){
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	n=read(),m=read();
    for(int i=1;i<=n;i++){
        a[i]=read();
    }
    root[0]=build(root[0],1,n);
    for(int i=1;i<=m;i++){
        int ver=read(),opt=read(),loc=read();
        if(opt==1){
            int val=read();
            root[i]=modify(root[ver],1,n,loc,val);
        }
        else{
            print(ask(root[ver],1,n,loc));
            putchar('\n');
            root[i]=root[ver];
        }
    }
	return 0;
}

感激不尽!!

2023/4/25 21:49
加载中...