제출 #309294

#제출 시각아이디문제언어결과실행 시간메모리
309294georgerapeanuFinding Routers (IOI20_routers)C++17
60.06 / 100
2 ms384 KiB
#include "routers.h"
#include <vector>
#include <algorithm>


using namespace std;

void solve(int l,int r,int l_val,int r_val,vector<int> &lst_pos){
    if(l_val == r_val){
        lst_pos[l_val] = max(lst_pos[l_val],r);
        return ;
    }
    
    int m = (l + r) / 2;

    solve(l,m,l_val,use_detector(m),lst_pos);
    solve(m + 1,r,use_detector(m + 1),r_val,lst_pos);
}

vector<int> find_routers(int l, int n, int q) {
	vector<int> ans(n,0);
    vector<int> lst_pos(n,0);
    
    solve(0,l,0,use_detector(l),lst_pos);

    vector<pair<int,int> > tmp;

    for(int i = 0;i < (int)lst_pos.size();i++){
        tmp.push_back({lst_pos[i],i});
    }

    ans[0] = 0;

    for(int i = 0;i < (int)tmp.size() - 1;i++){
        if(tmp[i].second < tmp[i + 1].second){
            ans[tmp[i + 1].second] = 2 * tmp[i].first - ans[tmp[i].second];
        }
        else{
            ans[tmp[i + 1].second] = 2 * tmp[i].first - ans[tmp[i].second] + 1;
        }
    }

    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...