답안 #494458

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
494458 2021-12-15T13:41:54 Z iulia13 Floppy (RMI20_floppy) C++14
100 / 100
103 ms 15144 KB
#include <bits/stdc++.h>
#include "floppy.h"
using namespace std;
const int NMAX = 100005;
const int LG = 20;
int st[NMAX];
int rmq[NMAX][LG];
int lft[NMAX];
///void save_to_floppy(string &bits);
void read_array(int subtask_id, const vector <int> &v)
{
    string a = "";
    int k = 0, n = v.size();
    for (int i = 0; i < n; i++)
    {
        while (k && st[k] < v[i])
        {
            a += '1';
            k--;
        }
        st[++k] = v[i];
        a += '0';
    }
    save_to_floppy(a);
}
vector <int> sol;
int lg[NMAX];
vector<int> solve_queries(int subtask_id, int N, const string &bits, const vector<int> &a, const vector<int> &b)
{
    int k = 0, m = bits.size(), jj = 0;
    for (int i = 1; i <= N; i++)
    {
        if (1 < i)
            lg[i] = 1 + lg[i / 2];
        while(k && bits[jj] == '1')
            k--, jj++;
        jj++;
        lft[i] = st[k];
        st[++k] = i;
        rmq[i][0] = i;
    }
    for (int j = 1; (1 << j) <= N; j++)
        for (int i = 1; i <= N; i++)
        {
            rmq[i][j] = rmq[i][j - 1];
            if (lft[rmq[i + (1 << (j - 1))][j - 1]] < i)
                rmq[i][j] = rmq[i + (1 << (j - 1))][j - 1];
        }
    int q = a.size();
    for (int i = 0; i < q; i++)
    {
        int aa = a[i], bb = b[i];
        aa++, bb++;
        int lgg = lg[bb - aa + 1];
        int ans = rmq[aa][lgg];
        if (lft[rmq[bb - (1 << lgg) + 1][lgg]] < aa)
            ans = rmq[bb - (1 << lgg) + 1][lgg];
        sol.push_back(ans - 1);
    }
    return sol;
}

Compilation message

floppy.cpp: In function 'std::vector<int> solve_queries(int, int, const string&, const std::vector<int>&, const std::vector<int>&)':
floppy.cpp:30:16: warning: unused variable 'm' [-Wunused-variable]
   30 |     int k = 0, m = bits.size(), jj = 0;
      |                ^
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) {
      |         ~~~~~~~~~~~~~~~~~~~~~^~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 776 KB Output is correct
2 Correct 2 ms 780 KB Output is correct
3 Correct 3 ms 776 KB Output is correct
4 Correct 2 ms 780 KB Output is correct
5 Correct 2 ms 752 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 23 ms 3404 KB Output is correct
2 Correct 23 ms 3408 KB Output is correct
3 Correct 24 ms 3328 KB Output is correct
4 Correct 24 ms 3272 KB Output is correct
5 Correct 26 ms 3360 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 88 ms 11448 KB Output is correct
2 Correct 87 ms 15120 KB Output is correct
3 Correct 84 ms 15004 KB Output is correct
4 Correct 103 ms 15024 KB Output is correct
5 Correct 95 ms 15144 KB Output is correct