# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
856245 | divad | Floppy (RMI20_floppy) | C++14 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#include "floppy.h"
using namespace std;
string bt;
const int NMAX = 4e5+2;
int bigr[NMAX], st[NMAX], vf;
void save_to_floppy(string &bits){
bt = bits;
}
void read_array(int subtask_id, vector<int> &v){
string bits = "";
int n = v.size();
vf = 0;
for(int i = 0; i < n; i++){
while(vf > 0 && st[vf] < v[i]){
bits += "1";
vf--;
}
st[++vf] = v[i];
bits += "0";
}
save_to_floppy(bits);
}
vector<int> solve_queries(int subtask_id, int N, string &bits, vector<int> &a, vector<int> &b){
int n = N, m = a.size();
vf = 0;
int pos = 0;
for(int i = 1; i <= n; i++){
while(bits[pos] == '1'){
vf--;
pos++;
}
bigr[i] = st[vf];
st[++vf] = i;
pos++;
}
vector<int> ans;
for(int i = 0; i < a.size(); i++){
int l = a[i], r = b[i];
l++, r++;
int id = r;
while(bigr[id] >= l){
id = bigr[id];
}
ans.push_back(id-1);
}
return ans;
}