제출 #1284553

#제출 시각아이디문제언어결과실행 시간메모리
1284553thelegendary08Overtaking (IOI23_overtaking)C++17
0 / 100
2 ms340 KiB
#include "overtaking.h"
#include<bits/stdc++.h>
#define int long long
#define f0r(i,n) for(int i = 0; i<n; i++)
#define pb push_back
#define mp make_pair
#define vi vector<int>
#define vvi vector<vi>
#define mii map<int,int>
#define pii pair<int,int>
#define vpii vector<pii>
#define FOR(i, k, n) for(int i = k; i<n; i++)
#define vb vector<bool>
#define vout(v) for(auto u : v)cout<<u<<' '; cout<<endl;
#define ckmax(x, y) x = max(x,y)
#define dout(x) cout<<x<<' '<<#x<<endl;
#define dout2(a,b) cout<<a<<' '<<#a<<' '<<b<<' '<<#b<<endl
using namespace std;
int L, N, X, M;
vi T, W, S;
vvi rch, ex; //sorting station, reaching time
void init(signed L, signed N, std::vector<long long> T, std::vector<signed> W, signed X, signed M, std::vector<signed> S)
{	
	::L=L, ::N=N, ::X=X, ::M=M, ::T=T;
	::W.resize(N); f0r(i,N)::W[i] = W[i];
	::S.resize(M); f0r(i,M)::S[i] = S[i];
	rch.resize(M); f0r(i, M)rch[i].resize(N); 
	ex.resize(M); f0r(i, M)ex[i].resize(N); 
	f0r(i, N)ex[0][i] = T[i], rch[0][i] = T[i]; 
	FOR(i, 1, M){
		int mx = 0; vpii w; f0r(j, N)w.pb(mp(rch[i-1][j], j)); sort(w.begin(), w.end()); vi que; 
		f0r(j, N)ex[i][j] = rch[i-1][j] + (S[i] - S[i-1]) * W[j]; 
		f0r(j, N){
			if(j != 0 && w[j].first != w[j-1].first){
				while(!que.empty()){
					int k = que.back(), d = w[k].second; mx = max(mx, ex[i][d]); que.pop_back(); 
				}
			}
			rch[i][w[j].second] = max(mx, ex[i][w[j].second]); que.pb(j);
		}
	}
	// f0r(i, M){
		// f0r(j, N)cout<<rch[i][j]<<' '; cout<<'\n'; 
	// }
    return;
}

long long arrival_time(long long Y)
{
	set<int>rel; 
	f0r(i, N){
		if(T[i] < Y && W[i] > X)rel.insert(i); 
	}
	// vout(rel); 
	int cur = Y; 
	FOR(i, 1, M){
		int tmp = cur + X * (S[i] - S[i-1]); int mx = tmp; vi w; 
		for(auto u : rel){
			if(ex[i][u] >= tmp){
				// dout2(u, rch[i][u]);
				mx = max(mx, ex[i][u]); w.pb(u); 
			}
		}
		for(auto u : w)rel.erase(u);
		// vout(rel); 
		cur = mx; //dout(cur); 
	}
    return cur;
    return 0; 
}
#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...