Submission #553270

#TimeUsernameProblemLanguageResultExecution timeMemory
553270cadmiumskySecret (JOI14_secret)C++14
0 / 100
444 ms4596 KiB
#include "secret.h" #include <bits/stdc++.h> using namespace std; const int nmax = 1e3 + 5; vector<int> v; namespace RMQ { int atr[nmax]; int rmq[12][nmax]; void color(int l, int r, int bit = 0) { //cerr << l << ' ' << r << ' ' << bit << '\n'; if(l + 1 >= r) { while(l <= r) atr[l] = bit, l++; return; } int mid = l + r >> 1; atr[mid] = atr[mid + 1] = bit; color(l, mid - 1, bit + 1); color(mid + 2, r, bit + 1); rmq[bit][mid] = v[mid]; rmq[bit][mid + 1] = v[mid + 1]; for(int i = mid - 1; i >= l; i--) rmq[bit][i] = Secret(v[i], rmq[bit][i + 1]); for(int i = mid + 2; i <= r; i++) rmq[bit][i] = Secret(rmq[bit][i - 1], v[i]); return; } namespace IRMQ { pair<int,int> irmq[12][nmax]; int lg[nmax]; void init(int n, int *vec) { lg[1] = 0; for(int i = 2; i <= n; i++) lg[i] = lg[i >> 1] + 1; for(int i = 0; i < n; i++) irmq[0][i] = {vec[i], i}; for(int bit = 1; bit < 12; bit++) { for(int i = 0; i + (1 << bit) <= n; i++) irmq[bit][i] = min(irmq[bit - 1][i], irmq[bit - 1][i + (1 << bit - 1)]); } } pair<int,int> query(int l, int r) { int st = lg[r - l + 1]; return min(irmq[st][l], irmq[st][r - (1 << st) + 1]); } } int query(int l, int r) { if(l == r) return v[l]; else if(l == r - 1) return Secret(v[l], v[r]); auto level = IRMQ::query(l, r); if(r == level.second) return rmq[level.first][l]; if(l == level.second) return rmq[level.first][r]; return Secret(rmq[level.first][l], rmq[level.first][r]); } } void Init(int N, int A[]) { //cerr << "YES\n"; v.resize(N); for(int i = 0; i < N; i++) v[i] = A[i]; RMQ::color(0, N - 1); RMQ::IRMQ::init(N, RMQ::atr); //cerr << "NO\n"; } int Query(int L, int R) { //cerr << "YES\n"; //return 0; return RMQ::query(L, R); }

Compilation message (stderr)

secret.cpp: In function 'void RMQ::color(int, int, int)':
secret.cpp:18:17: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   18 |     int mid = l + r >> 1;
      |               ~~^~~
secret.cpp: In function 'void RMQ::IRMQ::init(int, int*)':
secret.cpp:41:76: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   41 |           irmq[bit][i] = min(irmq[bit - 1][i], irmq[bit - 1][i + (1 << bit - 1)]);
      |                                                                        ~~~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...