QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#715003 | #9492. 树上简单求和 | NKheyuxiang | Compile Error | / | / | C++14 | 3.3kb | 2024-11-06 09:49:58 | 2024-11-06 09:49:58 |
Judging History
This is the latest submission verdict.
- [2024-11-06 09:49:58]
- Judged
- Verdict: Compile Error
- Time: 0ms
- Memory: 0kb
- [2024-11-06 09:49:58]
- Submitted
answer
#include<bits/stdc++.h>
#define N 400005
#define fi first
#define se second
#define mp make_pair
using namespace std;
int n,m;
unsigned long long a[N],val[N];
struct tree{
int h[N],to[N],nxt[N],cnt;
void jb(int u,int v){
to[++cnt]=v;
nxt[cnt]=h[u];
h[u]=cnt;
}
int id[N],pl[N],pr[N],tot;
int up[N][19],dep[N];
void dfs(int u,int fa){
val[u]=a[u]+val[fa];
id[tot]=u;
pl[u]=tot;
++tot;
dep[u]=dep[fa]+1;
up[u][0]=fa;
for(int i=1;i<=17;i++)
up[u][i]=up[up[u][i-1]][i-1];
for(int i=h[u];i!=0;i=nxt[i])
if(to[i]!=fa) dfs(to[i],u);
id[tot]=u;
pr[u]=tot;
tot++;
}
int lca(int x,int y){
if(dep[x]>dep[y]) swap(x,y);
for(int i=17;i>=0;i--)
if(dep[up[y][i]]>=dep[x]) y=up[y][i];
if(x==y) return x;
for(int i=17;i>=0;i--)
if(up[x][i]!=up[y][i])
x=up[x][i],y=up[y][i];
return up[x][0];
}
void work(){
for(int i=1;i<n;i++){
int x,y;
scanf("%d%d",&x,&y);
jb(x,y);
jb(y,x);
}
dfs(1,0);
}
}T1,T2;
const int t=640;
unsigned long long k[N],ans[N];
pair<int ,int > qt1[N][2],qt2[N][2];
int pre[N];
void init(int l,int r){
for(int i=0;i<=2*n;i++) pre[i]=0;
for(int i=l;i<=r;i++){
int u=T2.id[i],f=(T2.pl[u]==i?1:-1);
pre[T1.pl[u]+1]+=f;
pre[T1.pr[u]+1]-=f;
}
for(int i=1;i<=2*n;i++) pre[i]+=pre[i-1];
}
unsigned long long s0[N],s1[N];
void add(pair<int ,int > p,unsigned long long ad){
int idl=max(p.fi-1)/t+1,idr=(p.se+1)/t-1;
if(p.fi==0) idl=0;
if(idl>idr){
for(int i=p.fi;i<=p.se;i++) s0[i]+=ad;
}
else{
for(int i=p.fi;i<idl*t;i++) s0[i]+=ad;
for(int i=idr*t+t;i<=p.se;i++) s0[i]+=ad;
for(int i=idl;i<=idr;i++) s1[i]+=ad;
}
}
unsigned long long qry(pair<int ,int > p){
int idl=max(p.fi-1)/t+1,idr=(p.se+1)/t-1;
if(p.fi==0) idl=0;
unsigned long long res=0;
if(idl>idr){
for(int i=p.fi;i<=p.se;i++){
int u=T2.id[i];
unsigned long long w=s0[T1.pl[u]]+s1[T1.pl[u]/t]-s0[T1.pr[u]]-s1[T1.pr[u]/t];
if(T2.pl[u]==i) res+=w;
else res-=w;
}
}
else{
for(int i=p.fi;i<idl*t;i++){
int u=T2.id[i];
unsigned long long w=s0[T1.pl[u]]+s1[T1.pl[u]/t]-s0[T1.pr[u]]-s1[T1.pr[u]/t];
if(T2.pl[u]==i) res+=w;
else res-=w;
}
for(int i=idr*t+t;i<=p.se;i++){
int u=T2.id[i];
unsigned long long w=s0[T1.pl[u]]+s1[T1.pl[u]/t]-s0[T1.pr[u]]-s1[T1.pr[u]/t];
if(T2.pl[u]==i) res+=w;
else res-=w;
}
}
return res;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%llu",&a[i]);
T1.work();
T2.work();
for(int i=1;i<=m;i++){
int x,y;
scanf("%d%d%llu",&x,&y,&k[i]);
int lc1=T1.lca(x,y);
int lc2=T2.lca(x,y);
qt1[i][0]=mp(T1.pl[lc1]+1,T1.pl[x]);
qt1[i][1]=mp(T1.pl[lc1],T1.pl[y]);
qt2[i][0]=mp(T2.pl[lc2]+1,T2.pl[x]);
qt2[i][1]=mp(T2.pl[lc2],T2.pl[y]);
add(qt1[i][0],k[i]);
add(qt1[i][1],k[i]);
ans[i]=val[x]+val[y]-val[lc2]*2+a[lc2]+qry(qt2[i][0])+qry(qt2[i][1]);
}
for(int i=0;i*t<n*2;i++){
int l=i*t,r=min(n*2-1,i*t+t-1);
init(l,r);
unsigned long long sum=0;
for(int j=1;j<=m;j++){
sum+=k[j]*(pre[qt1[j][0].se+1]-pre[qt1[j][0].fi]+pre[qt1[j][1].se+1]-pre[qt1[j][1].fi]);
if(qt2[j][0].fi<=l&&r<=qt2[j][0].se) ans[j]+=sum;
if(qt2[j][1].fi<=l&&r<=qt2[j][1].se) ans[j]+=sum;
}
}
for(int i=1;i<=m;i++) printf("%llu\n",ans[i]);
}
詳細信息
answer.code: In function ‘void add(std::pair<int, int>, long long unsigned int)’: answer.code:68:20: error: no matching function for call to ‘max(int)’ 68 | int idl=max(p.fi-1)/t+1,idr=(p.se+1)/t-1; | ~~~^~~~~~~~ In file included from /usr/include/c++/13/algorithm:60, from /usr/include/x86_64-linux-gnu/c++/13/bits/stdc++.h:51, from answer.code:1: /usr/include/c++/13/bits/stl_algobase.h:257:5: note: candidate: ‘template<class _Tp> constexpr const _Tp& std::max(const _Tp&, const _Tp&)’ 257 | max(const _Tp& __a, const _Tp& __b) | ^~~ /usr/include/c++/13/bits/stl_algobase.h:257:5: note: template argument deduction/substitution failed: answer.code:68:20: note: candidate expects 2 arguments, 1 provided 68 | int idl=max(p.fi-1)/t+1,idr=(p.se+1)/t-1; | ~~~^~~~~~~~ /usr/include/c++/13/bits/stl_algobase.h:303:5: note: candidate: ‘template<class _Tp, class _Compare> constexpr const _Tp& std::max(const _Tp&, const _Tp&, _Compare)’ 303 | max(const _Tp& __a, const _Tp& __b, _Compare __comp) | ^~~ /usr/include/c++/13/bits/stl_algobase.h:303:5: note: template argument deduction/substitution failed: answer.code:68:20: note: candidate expects 3 arguments, 1 provided 68 | int idl=max(p.fi-1)/t+1,idr=(p.se+1)/t-1; | ~~~^~~~~~~~ In file included from /usr/include/c++/13/algorithm:61: /usr/include/c++/13/bits/stl_algo.h:5795:5: note: candidate: ‘template<class _Tp> constexpr _Tp std::max(initializer_list<_Tp>)’ 5795 | max(initializer_list<_Tp> __l) | ^~~ /usr/include/c++/13/bits/stl_algo.h:5795:5: note: template argument deduction/substitution failed: answer.code:68:20: note: mismatched types ‘std::initializer_list<_Tp>’ and ‘int’ 68 | int idl=max(p.fi-1)/t+1,idr=(p.se+1)/t-1; | ~~~^~~~~~~~ /usr/include/c++/13/bits/stl_algo.h:5805:5: note: candidate: ‘template<class _Tp, class _Compare> constexpr _Tp std::max(initializer_list<_Tp>, _Compare)’ 5805 | max(initializer_list<_Tp> __l, _Compare __comp) | ^~~ /usr/include/c++/13/bits/stl_algo.h:5805:5: note: template argument deduction/substitution failed: answer.code:68:20: note: mismatched types ‘std::initializer_list<_Tp>’ and ‘int’ 68 | int idl=max(p.fi-1)/t+1,idr=(p.se+1)/t-1; | ~~~^~~~~~~~ answer.code:70:16: error: ‘idr’ was not declared in this scope; did you mean ‘idl’? 70 | if(idl>idr){ | ^~~ | idl answer.code: In function ‘long long unsigned int qry(std::pair<int, int>)’: answer.code:80:20: error: no matching function for call to ‘max(int)’ 80 | int idl=max(p.fi-1)/t+1,idr=(p.se+1)/t-1; | ~~~^~~~~~~~ /usr/include/c++/13/bits/stl_algobase.h:257:5: note: candidate: ‘template<class _Tp> constexpr const _Tp& std::max(const _Tp&, const _Tp&)’ 257 | max(const _Tp& __a, const _Tp& __b) | ^~~ /usr/include/c++/13/bits/stl_algobase.h:257:5: note: template argument deduction/substitution failed: answer.code:80:20: note: candidate expects 2 arguments, 1 provided 80 | int idl=max(p.fi-1)/t+1,idr=(p.se+1)/t-1; | ~~~^~~~~~~~ /usr/include/c++/13/bits/stl_algobase.h:303:5: note: candidate: ‘template<class _Tp, class _Compare> constexpr const _Tp& std::max(const _Tp&, const _Tp&, _Compare)’ 303 | max(const _Tp& __a, const _Tp& __b, _Compare __comp) | ^~~ /usr/include/c++/13/bits/stl_algobase.h:303:5: note: template argument deduction/substitution failed: answer.code:80:20: note: candidate expects 3 arguments, 1 provided 80 | int idl=max(p.fi-1)/t+1,idr=(p.se+1)/t-1; | ~~~^~~~~~~~ /usr/include/c++/13/bits/stl_algo.h:5795:5: note: candidate: ‘template<class _Tp> constexpr _Tp std::max(initializer_list<_Tp>)’ 5795 | max(initializer_list<_Tp> __l) | ^~~ /usr/include/c++/13/bits/stl_algo.h:5795:5: note: template argument deduction/substitution failed: answer.code:80:20: note: mismatched types ‘std::initializer_list<_Tp>’ and ‘int’ 80 | int idl=max(p.fi-1)/t+1,idr=(p.se+1)/t-1; | ~~~^~~~~~~~ /usr/include/c++/13/bits/stl_algo.h:5805:5: note: candidate: ‘template<class _Tp, class _Compare> constexpr _Tp std::max(initializer_list<_Tp>, _Compare)’ 5805 | max(initializer_list<_Tp> __l, _Compare __comp) | ^~~ /usr/include/c++/13/bits/stl_algo.h:5805:5: note: template argument deduction/substitution failed: answer.code:80:20: note: mismatched types ‘std::initializer_list<_Tp>’ and ‘int’ 80 | int idl=max(p.fi-1)/t+1,idr=(p.se+1)/t-1; | ~~~^~~~~~~~ answer.code:83:16: error: ‘idr’ was not declared in this scope; did you mean ‘idl’? 83 | if(idl>idr){ | ^~~ | idl answer.code: In function ‘int main...