社区讨论

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 条回复,欢迎继续交流。

正在加载回复...