Submission #798533

#TimeUsernameProblemLanguageResultExecution timeMemory
798533QwertyPiRobots (IOI13_robots)C++14
76 / 100
199 ms65536 KiB
#include "robots.h" #include <bits/stdc++.h> using namespace std; struct Robot{ int x, y, id; }; const int T_MAX = 1e6; const int N_MAX = 5e4 + 11; vector<Robot> r, rx, ry; bool thrown[T_MAX]; struct BIT{ vector<int> t[N_MAX]; void add(int v, int x){ ++v; for(int i = v; i < N_MAX; i += i & -i){ t[i].push_back(x); } } int qry(int v, bool type_y){ ++v; int best = -1; for(int i = v; i; i -= i & -i){ while(!t[i].empty() && thrown[t[i].back()]) t[i].pop_back(); if(!t[i].empty() && (best == -1 || (type_y ? r[t[i].back()].y > r[best].y : r[t[i].back()].x > r[best].x))){ best = t[i].back(); } } return best; } } bit_x, bit_y; int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[]) { sort(X, X + A); sort(Y, Y + B); for(int i = 0; i < T; i++){ W[i] = upper_bound(X, X + A, W[i]) - X; S[i] = upper_bound(Y, Y + B, S[i]) - Y; if(W[i] == A && S[i] == B) return -1; } for(int i = 0; i < T; i++) r.push_back({W[i], S[i], i}); rx = ry = r; sort(rx.begin(), rx.end(), [](const Robot& a, const Robot& b){ return a.x < b.x; }); sort(ry.begin(), ry.end(), [](const Robot& a, const Robot& b){ return a.y < b.y; }); for(int i = 0; i < T; i++){ bit_x.add(ry[i].x, ry[i].id); bit_y.add(rx[i].y, rx[i].id); } int done = 0, ans = 0; while(done < T){ for(int i = 0; i < A; i++){ int q = bit_x.qry(i, false); if(q != -1) done++, thrown[q] = true; } for(int i = 0; i < B; i++){ int q = bit_y.qry(i, true); if(q != -1) done++, thrown[q] = true; } ans++; } return ans; }

Compilation message (stderr)

robots.cpp: In function 'int putaway(int, int, int, int*, int*, int*, int*)':
robots.cpp:40:2: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
   40 |  for(int i = 0; i < T; i++) r.push_back({W[i], S[i], i}); rx = ry = r;
      |  ^~~
robots.cpp:40:59: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
   40 |  for(int i = 0; i < T; i++) r.push_back({W[i], S[i], i}); rx = ry = r;
      |                                                           ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...