제출 #1232620

#제출 시각아이디문제언어결과실행 시간메모리
1232620LeonidCuk던전 (IOI21_dungeons)C++17
25 / 100
1188 ms2162688 KiB
#include "dungeons.h"
#include <bits/stdc++.h>
using namespace std;
int n;
vector<int>w,l,s,p,v;
struct pom{
	long long nxt,sum;
};
vector<vector<vector<pom>>>lca;
void init(int N,vector<int> S,vector<int> P,vector<int> W,vector<int> L) {
	n=N;
	l=L;
	s=S;
	p=P;
	w=W;
	s.push_back(0);
	l.push_back(n);
	w.push_back(n);
	p.push_back(0);
	map<int,int>mp;
	for(int i=0;i<n;i++)
	{
		if(mp[s[i]]==0)
		{
			mp[s[i]]=1;
			v.push_back(s[i]);
		}
	}
	v.push_back(0);
	sort(v.begin(),v.end());
	lca.resize(v.size(),vector<vector<pom>>(n+1,vector<pom>(25)));
	for(int i1=0;i1<v.size();i1++)
	{
		long long k=v[i1];
		for(int j=0;j<25;j++)
		{
			for(int i=0;i<=n;i++)
			{
				if(j==0)
				{
					if(k>=s[i])
					{
						lca[i1][i][j].nxt=w[i];
						lca[i1][i][j].sum=s[i];
					}
					else
					{
						lca[i1][i][j].nxt=l[i];
						lca[i1][i][j].sum=p[i];
					}
				}
				else
				{
					int a=lca[i1][i][j-1].nxt;
					lca[i1][i][j].nxt=lca[i1][a][j-1].nxt;
					lca[i1][i][j].sum=lca[i1][i][j-1].sum+lca[i1][a][j-1].sum;
				}
			}
		}
	}
	return;
}

long long simulate(int x, int z) {
	long long sum=z;
	for(int i=0;i<v.size()-1;i++)
	{
		if(sum>=v[i+1])continue;
		for(int j=24;j>=0;j--)
		{
			if(sum+lca[i][x][j].sum<v[i+1])
			{
				sum+=lca[i][x][j].sum;
				x=lca[i][x][j].nxt;
			}
		}
		sum+=lca[i][x][0].sum;
		x=lca[i][x][0].nxt;
	}
	sum+=lca[v.size()-1][x][24].sum;
	return sum;
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...