Submission #494459

#TimeUsernameProblemLanguageResultExecution timeMemory
494459mircea_007Floppy (RMI20_floppy)C++17
Compilation error
0 ms0 KiB
#include <stdio.h> #include <ctype.h> #include "floppy.h" #define MAXN 40000 #define MAXL 16 std::string _out; void dfs( int l, int r, const std::vector<int> &v ){ int i, max = l, hasleft, hasright; char newch[3] = { '\0', '\0', '\0' }; //printf("[%d, %d]\n", l, r); for( i = l + 1 ; i <= r ; i++ ) max = v[i] > v[max] ? i : max; newch[0] = '0' + (hasleft = (max > l)); newch[1] = '0' + (hasright = (max < r)); _out.append(newch); if( hasleft ) dfs(l, max - 1, v); if( hasright ) dfs(max + 1, r, v); } void read_array( int subtask_id, const std::vector<int> &v ){ _out.clear(); dfs(0, v.size() - 1, v); save_to_floppy(_out); } int rebuild( int v[], std::string &bits, int min, int pozv, int pozb ){ int i, hasleft, hasright, lleft, lright; hasleft = bits[pozb ] - '0'; hasright = bits[pozb + 1] - '0'; pozb += 2; if( hasleft ){ lleft = rebuild(v, bits, min, pozv, pozb); min += lleft; pozv += lleft; pozb += 2 * lleft; }else lleft = 0; i = pozv++;// retinem locul unde se afla maximul if( hasright ){ lright = rebuild(v, bits, min, pozv, pozb); min += lright; }else lright = 0; v[i] = min; return lleft + lright + 1; } int _v[MAXN]; int _n; std::vector<int> _answers; int _rmq[MAXN][MAXL]; int _log[MAXN + 1]; void RMQinit(){ int i, l, p2; _log[0] = _log[1] = 0; for( i = 2 ; i <= _n ; i++ ) _log[i] = 1 + _log[i >> 1]; for( i = 0 ; i < _n ; i++ ) _rmq[0][i] = i; l = 1; for( p2 = 1 ; p2 * 2 <= _n ; p2 <<= 1 ){ for( i = 0 ; i + 2 * p2 <= _n ; i++ ) _rmq[l][i] = _v[_rmq[l - 1][i]] > _v[_rmq[l - 1][i + p2]] ? _rmq[l - 1][i] : _rmq[l - 1][i + p2]; l++; } } int RMQquery( int l, int r ){ int _loglr = _log[r - l + 1], p2; p2 = (1 << _loglr); return _v[_rmq[_loglr][l]] > _v[_rmq[_loglr][r - p2 + 1]] ? _rmq[_loglr][l] : _rmq[_loglr][r - p2 + 1]; } std::vector<int> solve_queries( int subtask_id, int N, std::string &bits, const std::vector<int> &a, const std::vector<int> &b ){ int i; _n = rebuild(_v, bits, 0, 0, 0); if( _n != N ){ fprintf(stderr, "(!) CRITICAL: n not the same!!!! (%d != %d)\n", _n, N); exit(1); } RMQinit(); for( i = 0 ; i < (int)a.size() ; i++ ) _answers.push_back(RMQquery(a[i], b[i])); return _answers; }

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) {
      |         ~~~~~~~~~~~~~~~~~~~~~^~~~
/usr/bin/ld: /tmp/ccrBDNzd.o: in function `run2()':
stub.cpp:(.text+0x698): undefined reference to `solve_queries(int, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<int, std::allocator<int> > const&, std::vector<int, std::allocator<int> > const&)'
collect2: error: ld returned 1 exit status