Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
39940 氩_wjy 【S】T1 C++ 解答错误 0 2000 MS 488636 KB 1859 2026-02-09 20:12:17

Tests(0/10):


#include<bits/stdc++.h> // #define int long long #define lb(x) ((x)&(-(x))) #define endl '\n' using namespace std; const int N=2e6+7; vector<int> E[N]; int n,q,Sum[N]; int a[N],Ans[N]; struct OP{ int x,Con,op,id; OP(int _x=0,int _Con=0,int _op=0,int _id=0){ x=_x,Con=_Con,op=_op,id=_id; } //op=0:a[v],v,u,0,0; //op=1:0,r,v,1,qid; bool operator<(OP r){return x==r.x?abs(op)<abs(r.op):x<r.x;} }qq[N<<2]; vector<OP> vc[N][2]; int cnt=0; inline int read(){ int x=0,f=1; char ch=getchar(); while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();} while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();} return x; } inline void wr(int x){ if(x<10)return void(putchar(x+48)); wr(x/10),putchar(x%10+48); } signed main(){ #ifndef ONLINE_JUDGE freopen("count.in","r",stdin); freopen("count.out","w",stdout); #endif n=read(),q=read(); for(int i=1;i<=n;i++)a[i]=read(); for(int i=1;i<n;i++){ int u,v;u=read(),v=read(); E[u].push_back(v); E[v].push_back(u); } for(int i=1;i<=q;i++){ int p,l,r;p=read(),l=read(),r=read(); if(E[i].size()==1){ Ans[i]=(l<=E[i][0]&&E[i][0]<=r)*a[E[i][0]]; continue; } vc[l-1][1].push_back(OP(l-1,p,-1,i)); vc[r][1].push_back(OP(r,p,1,i)); } for(int u=1;u<=n;u++){ for(auto v:E[u])vc[v][0].push_back(OP(v,u,0,0)); } for(int i=1;i<=n;i++)for(int j=0;j<2;j++){ for(auto x:vc[i][j])qq[++cnt]=x; } for(int i=1;i<=cnt;i++){ if(qq[i].op==0)Sum[qq[i].Con]+=a[qq[i].x]; else Ans[qq[i].id]+=Sum[qq[i].Con]*qq[i].op; } for(int i=1;i<=q;i++)wr(Ans[i]),putchar('\n'); fflush(stdout); // cerr<<abs(&ST-&ED)/1048576.0<<endl; return 0; }


测评信息: