不知道是哪里错了,三个样例都过了,与题解对过但无果。
代码:
#include <bits/stdc++.h>
using namespace std;
int c[1000005],n,m,cnt;
vector<int>G[1000005];
int a[1000005],ls[1000005],rs[1000005];
int lowbit(int x){return x&-x;}
void add(int i,int x){for(;i<=n;i+=lowbit(i))c[i]+=x;}
int cnt1(int i){int ans=0;for(;i>0;i-=lowbit(i))ans+=c[i];return ans;}
void dfs(int x){
ls[x]=++cnt;
for(int i=G[x].size()-1;i>=0;--i){
dfs(G[x][i]);
}
rs[x]=++cnt;
}
int main(){
cin>>n>>m;
cin>>a[1];
for(int i=2;i<=n;++i){
int x;
cin>>a[i]>>x;
G[x].push_back(i);
}
dfs(1);
while(m--){
char op;
cin>>op;
if(op=='p'){
int i,k;
cin>>i>>k;
add(ls[i]+1,k);
add(rs[i],-k);
}
else{
int i;
cin>>i;
cout<<cnt1(ls[i])+a[i]<<"\n";
}
}
return 0;
}