社区讨论
70pts
P14521【MX-S11-T2】加减乘除参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mi6tahsw
- 此快照首次捕获于
- 2025/11/20 10:28 3 个月前
- 此快照最后确认于
- 2025/11/21 00:00 3 个月前
CPP
#include<bits/stdc++.h>
#define int __int128
using namespace std;
const int N = 5e5+10;
const int inf = 1ll<<127;
int n,q,p,l,r,x,L[N],R[N];
template<typename T>inline void read(T&x){
x=0;
int f=1;
char ch=getchar();
while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}
while(isdigit(ch)) x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
x*=f;
}
template<typename T,typename... Args> inline void read(T&x,Args&... args){
read(x);
read(args...);
}
template<typename T>inline void write(T x){
static int buf[40],top=0;
if(x<0){putchar('-');x=~x+1;}
while(x) buf[++top]=x%10,x/=10;
if(top==0) buf[++top]=0;
while(top) putchar(buf[top--]^48);
}
template<typename T,typename... Args>inline void write(T x,Args... args){
write(x);
write(args...);
}
struct E{
int to,l,r;
};
struct NewE{
int l,r;
}b[N];
vector<E>e[N];
struct node{
char op;
int val;
}a[N];
void dfs(int x,int fath,int deladd){
for(auto it:e[x]){
if(it.to==fath) continue;
b[it.to].l=max(b[x].l,it.l-deladd);
b[it.to].r=min(b[x].r,it.r-deladd);
dfs(it.to,x,deladd+a[it.to].val);
}
}
signed main(){
read(n,q);
for(int i=2;i<=n;++i){
read(p,l,r);
e[i].emplace_back((E){p,l,r});
e[p].emplace_back((E){i,l,r});
}
for(int i=1;i<=n;++i){
cin>>a[i].op;
read(a[i].val);
if(a[i].op=='-') a[i].val=-a[i].val;
b[i].l=-inf,b[i].r=inf;
}
dfs(1,0,a[1].val);
for(int i=1;i<=n;++i){
L[i]=b[i].l,R[i]=b[i].r;
}
sort(L+1,L+n+1);
sort(R+1,R+n+1);
while(q--){
read(x);
int l=0,r=n+1,cnt=0;
while(l<r-1){
int mid=l+r>>1;
if(L[mid]>x) r=mid;
else l=mid;
}
cnt+=n-r+1;
l=0,r=n+1;
while(l<r-1){
int mid=l+r>>1;
if(R[mid]<x) l=mid;
else r=mid;
}
cnt+=l;
write(n-cnt);puts("");
}
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...