This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <stdlib.h>
#include <string.h>
#include <stack>
#include "floppy.h"
void read_array(int subtask_id, const std::vector<int> &v) {
std::string bits;
std::stack<int> p;
int x = 0,n = v.size();
for(int i = 1;i < n;i++)
{
if(v[i] < v[i-1])
{
bits.push_back('0');
p.push(v[i-1]);
x++;
}
else
{
bits.push_back('1');
while(x != 0 && v[i] > p.top())
{
bits.push_back('1');
p.pop();
x--;
}
if(x != 0)bits.push_back('0');
}
}
save_to_floppy(bits);
}
std::vector<int> solve_queries(int subtask_id, int N,
const std::string &bits,
const std::vector<int> &a, const std::vector<int> &b)
{
int n = bits.size(),pos[N],x = 0,j = 0,s = 0;
for(int i = 0;i < n;i++)
{
if(s == 1)
{
if(bits[i] == '1')
{
x--;
if(x == 0)s = 0;
}
else s = 0;
}
else
{
if(bits[i] == '0')x++;
else if(x != 0)s = 1;
pos[j] = i;
j++;
}
}
pos[N-1] = bits.size();
n = a.size();
std::vector<int> ans;
for(int k = 0;k < n;k++)
{
int i = a[k],m = a[k];
x = 0;
while(i != b[k])
{
int l = pos[i],r = pos[i+1];
if(bits[l] == '0')x++;
else if(r - l >= x + 1)
{
if(bits[l + x] == '1')
{
x = 0;
m = i + 1;
}
else x = 1;
}
else x -= r - l - 2;
i++;
}
ans.push_back(m);
}
return ans;
}
Compilation message (stderr)
stub.cpp: In function 'void run2()':
stub.cpp:101:30: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
101 | if (query_answers.size() != M) {
| ~~~~~~~~~~~~~~~~~~~~~^~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |