QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#553771#8222. 投票游戏275307894a0 48ms77424kbC++142.7kb2024-09-08 20:00:162024-09-08 20:00:16

Judging History

This is the latest submission verdict.

  • [2024-09-08 20:00:16]
  • Judged
  • Verdict: 0
  • Time: 48ms
  • Memory: 77424kb
  • [2024-09-08 20:00:16]
  • Submitted

answer

#include<bits/stdc++.h>
#define Gc() getchar()
#define Me(x,y) memset(x,y,sizeof(x))
#define Mc(x,y) memcpy(x,y,sizeof(x))
#define d(x,y) ((m)*(x-1)+(y))
#define R(n) (rnd()%(n)+1)
#define Pc(x) putchar(x)
#define LB lower_bound
#define UB upper_bound
#define fi first
#define se second
#define eb emplace_back
#define all(x) x.begin(),x.end()
using namespace std;using ll=long long;using db=double;using lb=long db;using ui=unsigned;using ull=unsigned long long;using pii=pair<int,int>;
const int N=1e6+5,M=N*4+5,K=1e7+5,mod=998244353,Mod=mod-1;const db eps=1e-9;const ll INF=1e18+7;mt19937 rnd(263082);
#define Tp template<typename T>
#define Ts template<typename T,typename... Ar>
namespace Debug{
	Tp void _debug(char* f,T t){cerr<<f<<'='<<t<<endl;}
	Ts void _debug(char* f,T x,Ar... y){while(*f!=',') cerr<<*f++;cerr<<'='<<x<<",";_debug(f+1,y...);}
	#ifdef LOCAL
	#define gdb(...) _debug((char*)#__VA_ARGS__,__VA_ARGS__)
	#else 
	#define gdb(...) void()
	#endif
}using namespace Debug;
int n,q,fa[N],A[N],B[N];
vector<int> S[N];
int d[N],tp[N],siz[N],son[N],id[N],ih;
void dfs1(int x,int La){
	d[x]=d[La]+1;siz[x]=1;
	for(int i:S[x]) dfs1(i,x),siz[x]+=siz[i],siz[i]>siz[son[x]]&&(son[x]=i);
}
void dfs2(int x,int La){
	tp[x]=La;id[x]=++ih;if(son[x]) dfs2(son[x],La);
	for(int i:S[x]) if(i^son[x]) dfs2(i,i);
}
struct DS1{
	map<ll,ll> f;
	void add(ll x,ll y){f[x]+=y;}
	ll qry(ll x){
		ll ti=INF;x=INF-x;
		for(auto it=f.rbegin();it!=f.rend();it++){
			if(x<ti-it->fi) return ti-x;
			x+=it->se-(ti-it->fi);
		}
		assert(0);
	}
}f1[N];
ll dp[N],sum[N];
void make(int x,int La){
	f1[x].add(-1,0);sum[x]=A[x];
	for(int i:S[x]) make(i,x),f1[x].add(dp[i],B[i]),sum[x]+=B[i];
	dp[x]=f1[x].qry(sum[x]);
	gdb(x,dp[x]);
}
void modify(int p,int x,int y){
	sum[p]-=A[p];A[p]=x;sum[p]+=A[p];
	if(p^1){
		f1[fa[p]].add(dp[x],-B[p]);
		sum[fa[p]]-=B[p];
	}
	B[p]=y;
	dp[p]=f1[p].qry(sum[p]);
	if(p^1){
		f1[fa[p]].add(dp[x],B[p]);
		sum[fa[p]]+=B[p];
	}
	if(p==1) return;
	p=fa[p];
	while(p){
		if(p^1) f1[fa[p]].add(dp[p],-B[p]),
		dp[p]=f1[p].qry(sum[p]);
		if(p^1) f1[fa[p]].add(dp[p],B[p]);
		p=fa[p];
	}
}
ll qry(int x){
	return f1[x].qry(sum[x]);
}
void Solve(){
	scanf("%d%d",&n,&q);
	for(int i=2;i<=n;i++) scanf("%d",&fa[i]),S[fa[i]].push_back(i);
	dfs1(1,0);
	dfs2(1,1);
	for(int i=1;i<=n;i++) scanf("%d",&A[i]);
	for(int i=1;i<=n;i++) scanf("%d",&B[i]);
	make(1,0);
	while(q--){
		int op,p,x,y;
		scanf("%d",&op);
		if(op==1) scanf("%d%d%d",&p,&x,&y),modify(p,x,y);
		else{
			scanf("%d%d",&x,&y);
			printf("%d\n",make_pair(qry(x),x)<make_pair(qry(y),y));
		}
	}
}
int main(){
	int t=1;
	// scanf("%d",&t);
	while(t--) Solve();
	cerr<<clock()*1.0/CLOCKS_PER_SEC<<'\n';
}

详细

Subtask #1:

score: 0
Runtime Error

Test #1:

score: 0
Runtime Error

input:

20 500
1 1 3 1 3 5 6 6 7 3 5 3 9 5 4 7 7 18 2
42129194 82765784 1447057 29726963 82321558 32094641 22474113 49277574 27527633 20746795 47630926 92888389 26787144 80703040 43876864 97991729 12117966 75633318 33577855 93462601
69163546 49621952 45236756 46447931 34085269 55246550 54414402 99593046 103...

output:


result:


Subtask #2:

score: 0
Skipped

Dependency #1:

0%

Subtask #3:

score: 0
Time Limit Exceeded

Test #13:

score: 0
Time Limit Exceeded

input:

200 200000
1 2 3 3 5 3 1 6 2 9 11 5 5 2 4 9 17 8 1 4 10 20 18 20 23 13 16 28 15 4 6 27 26 11 30 25 10 2 13 23 25 35 4 8 40 43 36 26 7 27 45 35 14 31 54 45 9 8 9 54 16 32 62 9 29 2 43 39 34 39 27 2 52 56 6 9 48 26 66 28 35 57 79 13 71 61 38 43 80 26 61 26 79 1 24 64 79 15 41 42 56 55 6 24 92 43 89 76...

output:

0
0
1
0
1
0
0
0
1
0
0
1
1
0
1
0
0
0
0
1
1
0
0
0
0
0
1
0
1
0
0
1
0
1
0
1
1
1
1
0
0
0
0
1
0
1
0
1
1
1
1
1
0
0
0
0
0
1
1
0
1
1
1
0
1
0
0
0
0
0
0
1
1
1
0
1
0
0
0
0
1
0
0
1
1
1
1
0
1
0
0
1
0
1
0
0
1
0
1
1
0
1
1
1
0
1
0
0
1
1
1
1
1
0
0
0
0
0
0
0
1
0
1
1
1
0
1
1
0
1
1
1
1
1
1
1
0
1
1
1
0
0
1
0
0
0
0
1
0
0
...

result:


Subtask #4:

score: 0
Runtime Error

Test #18:

score: 25
Accepted
time: 48ms
memory: 77424kb

input:

200 200000
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1...

output:

1
0
0
0
0
0
1
1
1
0
0
0
0
0
1
0
1
0
0
1
0
1
0
1
1
1
1
0
1
0
0
0
1
1
1
0
0
0
1
1
1
1
0
0
1
0
0
1
0
0
1
1
0
0
0
0
0
1
1
1
1
1
0
1
0
0
1
1
1
0
0
0
1
0
0
0
1
1
1
1
0
1
1
0
0
1
1
0
1
0
1
1
1
0
0
0
1
0
1
1
0
0
0
1
0
0
0
0
1
1
0
1
0
1
1
0
1
1
1
0
0
1
0
1
1
1
1
1
1
0
0
0
1
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
1
0
...

result:

ok 99788 numbers

Test #19:

score: 0
Runtime Error

input:

200 200000
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1...

output:


result:


Subtask #5:

score: 0
Time Limit Exceeded

Test #26:

score: 0
Time Limit Exceeded

input:

200 200000
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 1...

output:

0
1
0
1
1
0
1
0
1
1
1
0
1
0
1
0
0
0
0
1
1
0
1
1
1
0
0
1
0
0
0
0
1
1
1
0
0
0
1
0
0
0
0
0
1
1
0
0
0
0
1
0
0
1
1
0
0
0
0
1
1
0
0
1
0
1
0
0
1
1
1
1
1
1
1
1
1
0
1
0
1
0
1
1
1
1
1
1
0
0
0
0
1
0
0
0
1
1
1
0
0
0
0
0
1
0
1
0
0
0
0
1
1
0
1
0
0
0
1
0
0
0
1
0
1
1
1
1
1
1
0
0
1
0
0
0
1
1
1
0
0
1
0
1
0
1
0
0
1
0
...

result:


Subtask #6:

score: 0
Skipped

Dependency #1:

0%