20分蒟蒻求助(全T)
查看原帖
20分蒟蒻求助(全T)
497817
羊摆摇楼主2021/9/19 23:28
#include <bits/stdc++.h>
using namespace std;

inline void read(int &X){
    X=0;int w=0;char ch=0;
    while(!isdigit(ch))w|=ch=='-',ch=getchar();
    while( isdigit(ch))X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
    X=w?-X:X;
}

inline void llread(long long &X){
    X=0;int w=0;char ch=0;
    while(!isdigit(ch))w|=ch=='-',ch=getchar();
    while( isdigit(ch))X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
    X=w?-X:X;
}

const int N=3e5+5;
int n,m;
long long A[N];

struct cqr{
	int a,b,d=0;
	long long c;
}B[N];

struct rqc{
	long long a;
	int b,c=0;
}C[N];

void zl(rqc &a){
	if(a.a>=A[a.b]){
		a.c++;
		if(a.b==1)return;
		if(B[a.b].b)a.a*=B[a.b].c;
		else a.a+=B[a.b].c;
		a.b=B[a.b].a;
		zl(a);
	}else{
		B[a.b].d++;
		return;
	}
}

int main(){
	read(n);read(m);
	for(register int k=1;k<=n;k++)llread(A[k]);
	for(register int k=2;k<=n;k++){
		read(B[k].a);read(B[k].b);llread(B[k].c);
	}
	for(register int k=1;k<=m;k++){
		llread(C[k].a);read(C[k].b);
		zl(C[k]);
	}
	for(register int k=1;k<=n;k++)printf("%d\n",B[k].d);
	for(register int k=1;k<=m;k++)printf("%d\n",C[k].c);
	return 0;
} 
2021/9/19 23:28
加载中...