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;
}
感激不尽!!