| Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|---|
| 39937 | 22fhq | 【S】T1 | C++ | 编译错误 | 0 | 0 MS | 0 KB | 1423 | 2026-02-09 20:10:45 |
#include<bits/stdc++.h> #PRAGMA GCC optimize(2) void read(int &x){ x=0;char c=getchar();bool neg=0; for(;!isdigit(c);c=getchar())neg=(c=='-'); for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+(c^48); if(neg)x=-x; } #define read2(a,b) read(a),read(b) #define read3(a,b,c) read2(a,b),read(c) #define read4(a,b,c,d) read3(a,b,c),read(d) using namespace std; int n,q,a[2000005],d[2000005]; vector<int>e[2000005],s[2000005]; void slv(){ read2(n,q); for(int i=1;i<=n;i++)read(a[i]); for(int i=1;i<n;i++){ int u,v; read2(u,v); e[u].push_back(v); e[v].push_back(u); } for(int i=1;i<=n;i++){ d[i]=e[i].size(); e[i].push_back(0); sort(e[i].begin(),e[i].end()); s[i].resize(d[i]+1); for(int j=1;j<=d[i];j++)s[i][j]=s[i][j-1]+a[e[i][j]]; } while(q--){ int u,l,r; read3(u,l,r); int L=0,R=d[u],mid; while(L<R){ mid=(L+R+1>>1); if(e[u][mid]>=l)R=mid-1; else L=mid; } l=L; L=0,R=d[u],mid; while(L<R){ mid=(L+R+1>>1); if(e[u][mid]>r)R=mid-1; else L=mid; } r=L; printf("%d\n",s[u][r]-s[u][l]); } } signed main(){ freopen("count.in","r",stdin); freopen("count.out","w",stdout); slv(); return 0; }