제출 #1200245

#제출 시각아이디문제언어결과실행 시간메모리
1200245guagua0407Finding Routers (IOI20_routers)C++20
100 / 100
4 ms840 KiB
#include "routers.h"
//#include "grader.cpp"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int,int>
#define f first
#define s second
#define all(x) x.begin(),x.end()
#define _ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);

namespace{
    int cnt = 0;
    vector<int> ans;
    const int mxl=1e5+5;
    vector<int> rec(mxl,-1);
    vector<int> qs;
    int query(int x){
        if(rec[x]!=-1) return rec[x];
        qs.push_back(x);
        return rec[x]=use_detector(x);
    }
}

void go(int l,int r,int tl,int tr){
    if(l==r){
        return;
    }
    int mid=(l+r)/2;
    int L=tl,R=tr;
    for(auto v:qs){
        if(rec[v]<=mid) L=max(L,v);
        else R=min(R,v);
    }
    while(L<R){
        int M=(L+R+1)/2;
        if(query(M)<=mid){
            L=M;
        }
        else{
            R=M-1;
        }
    }
    ans[mid]=L;
    go(l,mid,tl,L);
    go(mid+1,r,L,tr);
}

std::vector<int> find_routers(int l, int n, int q) {
    ans=vector<int>(n);
    go(0,n-1,0,l);
    vector<int> val(n);
    for(int i=1;i<n;i++){
        val[i]=ans[i-1]+(ans[i-1]-val[i-1]);
    }
	return val;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...