# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
857326 |
2023-10-05T22:19:55 Z |
zsombor |
Floppy (RMI20_floppy) |
C++17 |
|
81 ms |
29148 KB |
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include "floppy.h"
using namespace std;
int n;
vector <int> v;
vector <int> Log2;
vector <vector <int>> st;
string b;
vector <int> p;
void build_st() {
Log2.assign(4e4, 0);
for (int i = 2; i <= n; i++) Log2[i] = Log2[i / 2] + 1;
st.resize(8e4);
for (int i = 0; i < 8e4; i++) {
st[i].assign(16, 0);
st[i][0] = i;
}
for (int j = 1; j < 16; j++) {
for (int i = 0; i < n; i++) {
int x = st[i][j - 1], y = st[i + (1 << (j - 1))][j - 1];
st[i][j] = (v[x] > v[y] ? x : y);
}
}
}
int query_st(int l, int r) {
int l2 = Log2[r - l + 1], x = st[l][l2], y = st[r - (1 << l2) + 1][l2];
return (v[x] > v[y] ? x : y);
}
void get_b(int l, int r) {
if (l > r) return;
int x = query_st(l, r);
b.push_back('0');
get_b(l, x - 1);
b.push_back('1');
get_b(x + 1, r);
}
void get_p() {
p.assign(8e4, -1);
vector <int> last(5e4, -1);
int sum = 0;
for (int i = 0; i < 2 * n; i++) {
if (b[i] == '0') {
last[sum] = i;
sum++;
} else {
sum--;
p[last[sum]] = i;
}
}
}
void get_v(int l, int r, int val) {
if (l > r) return;
get_v(l + 1, p[l] - 1, val - 1);
v.push_back(val);
get_v(p[l] + 1, r, val - 1);
}
void read_array(int subt, const vector<int> &V) {
n = V.size();
v.assign(8e4, -2e9);
for (int i = 0; i < n; i++) v[i] = V[i];
build_st();
get_b(0, n - 1);
save_to_floppy(b);
}
vector <int> solve_queries(int subt, int N, const string &B, const vector<int> &L, const vector<int> &R) {
n = N, b = B;
get_p();
v.clear();
get_v(0, 2 * n - 1, 0);
v.resize(8e4, -2e9);
build_st();
vector <int> ans;
for (int i = 0; i < L.size(); i++) ans.push_back(query_st(L[i], R[i]));
return ans;
}
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:83:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
83 | for (int i = 0; i < L.size(); i++) ans.push_back(query_st(L[i], R[i]));
| ~~^~~~~~~~~~
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 |
1 |
Correct |
15 ms |
18564 KB |
Output is correct |
2 |
Correct |
18 ms |
18576 KB |
Output is correct |
3 |
Correct |
13 ms |
18556 KB |
Output is correct |
4 |
Correct |
13 ms |
18568 KB |
Output is correct |
5 |
Correct |
14 ms |
18560 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
31 ms |
20328 KB |
Output is correct |
2 |
Correct |
31 ms |
20436 KB |
Output is correct |
3 |
Correct |
29 ms |
20600 KB |
Output is correct |
4 |
Correct |
31 ms |
20344 KB |
Output is correct |
5 |
Correct |
30 ms |
20140 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
77 ms |
26136 KB |
Output is correct |
2 |
Correct |
81 ms |
27876 KB |
Output is correct |
3 |
Correct |
80 ms |
29148 KB |
Output is correct |
4 |
Correct |
78 ms |
28928 KB |
Output is correct |
5 |
Correct |
76 ms |
28048 KB |
Output is correct |