Submission #1066742

#TimeUsernameProblemLanguageResultExecution timeMemory
1066742LittleOrange추월 (IOI23_overtaking)C++17
65 / 100
3545 ms56916 KiB
#include "overtaking.h"
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
ll n,m,l,x;
vector<vector<ll>> t,e;
vector<ll> w,s;
vector<vector<pair<ll,ll>>> vs;
void init(int L, int N, std::vector<long long> T, std::vector<int> W, int X, int M, std::vector<int> S)
{
    n = N;
    m = M;
    l = L;
    x = X;
    w.assign(W.begin(),W.end());
    s.assign(S.begin(),S.end());
    t.resize(n+1,vector<ll>(m));
    for(ll i = 0;i<n;i++) t[i][0] = T[i];
    e = t;
    vs.emplace_back();
    for(ll j = 1;j<m;j++){
        vector<pair<ll,ll>> v;
        for(ll i = 0;i<n;i++){
            t[i][j] = e[i][j] = t[i][j-1]+w[i]*(s[j]-s[j-1]);
            v.push_back({t[i][j-1],e[i][j]});
        }
        sort(v.begin(),v.end());
        for(ll i = 1;i<n;i++){
            v[i].second = max(v[i].second,v[i-1].second);
        }
        for(ll i = 0;i<n;i++){
            auto it = lower_bound(v.begin(),v.end(),make_pair(t[i][j-1],0ll));
            if (it==v.begin()) continue;
            --it;
            t[i][j] = max(t[i][j],(*it).second);
        }
        vs.push_back(v);
    }
    //cout << "e:\n";
    //for(ll i = 0;i<n;i++) for(ll j = 0;j<m;j++) cout << e[i][j] << " \n"[j+1==m];
    //cout << "t:\n";
    //for(ll i = 0;i<n;i++) for(ll j = 0;j<m;j++) cout << t[i][j] << " \n"[j+1==m];
}

long long arrival_time(long long Y)
{
    for(ll j = 1;j<m;j++){
        auto it = lower_bound(vs[j].begin(),vs[j].end(),make_pair(Y,0ll));
        ll nxt = Y+x*(s[j]-s[j-1]);
        if (it!=vs[j].begin()){
            --it;
            nxt = max(nxt,(*it).second);
        }
        Y = nxt;
    }
    return Y;
}
#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...