Submission #566722

#TimeUsernameProblemLanguageResultExecution timeMemory
566722hoanghq2004Land of the Rainbow Gold (APIO17_rainbow)C++14
100 / 100
1603 ms189304 KiB
#include <bits/stdc++.h> #pragma GCC optimize ("O3") #pragma GCC optimize ("unroll-loops") #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #include "rainbow.h" using namespace __gnu_pbds; using namespace std; template <typename T> using ordered_set = tree <T, null_type, less <T>, rb_tree_tag, tree_order_statistics_node_update>; const int N = 2e5 + 10; set <pair <int, int>> V, X, Y, s; int maxx, minx, maxy, miny; struct range_tree { vector <int> BIT[N], dta[N]; vector <tuple <int, int, int>> work; void add(int x, int y, int val) { work.push_back({x, y, val}); for (; x < N; x += x & - x) dta[x].push_back(y); } void build() { for (int i = 0; i < N; ++i) { sort(dta[i].begin(), dta[i].end()); dta[i].erase(unique(dta[i].begin(), dta[i].end()), dta[i].end()); BIT[i].assign(dta[i].size() + 10, 0); } for (auto [x, y, val]: work) { for (; x < N; x += x & - x) { int z = lower_bound(dta[x].begin(), dta[x].end(), y) - dta[x].begin() + 1; for (; z < BIT[x].size(); z += z & - z) BIT[x][z] += val; } } } int get(int x, int y) { int ans = 0; for (; x; x -= x & - x) { int z = upper_bound(dta[x].begin(), dta[x].end(), y) - dta[x].begin(); for (; z; z -= z & - z) ans += BIT[x][z]; } return ans; } int get(int x, int y, int u, int v) { return get(u, v) - get(x - 1, v) - get(u, y - 1) + get(x - 1, y - 1); } } cnt[4]; void init(int R, int C, int x, int y, int M, char *S) { s.insert({x, y}); maxx = minx = x; ++maxx; maxy = miny = y; ++maxy; for (int i = 0; i < M; ++i) { if (S[i] == 'N') --x; if (S[i] == 'S') ++x; if (S[i] == 'E') ++y; if (S[i] == 'W') --y; maxx = max(maxx, x + 1); minx = min(minx, x); maxy = max(maxy, y + 1); miny = min(miny, y); s.insert({x, y}); } for (auto [x, y]: s) { V.insert({x, y}); V.insert({x, y + 1}); V.insert({x + 1, y}); V.insert({x + 1, y + 1}); X.insert({x, y}); Y.insert({x, y}); X.insert({x, y + 1}); Y.insert({x + 1, y}); } for (auto [x, y]: s) cnt[0].add(x, y, 1); for (auto [x, y]: V) cnt[1].add(x, y, 1); for (auto [x, y]: X) cnt[2].add(x, y, 1); for (auto [x, y]: Y) cnt[3].add(x, y, 1); cnt[0].build(); cnt[1].build(); cnt[2].build(); cnt[3].build(); } int colour(int _x, int _y, int _u, int _v) { ++_u, ++_v; int v = cnt[1].get(_x + 1, _y + 1, _u - 1, _v - 1); int e = cnt[2].get(_x, _y + 1, _u - 1, _v - 1) + cnt[3].get(_x + 1, _y, _u - 1, _v - 1); int r = cnt[0].get(_x, _y, _u - 1, _v - 1); return e - v + 1 + (_x < minx && _u > maxx && _y < miny && _v > maxy) - r; } //// //static int R, C, M, Q; //static int sr, sc; //static char S[100000 + 5]; // //int main() { // scanf("%d %d %d %d", &R, &C, &M, &Q); // scanf("%d %d", &sr, &sc); // if (M > 0) { // scanf(" %s ", S); // } // // init(R, C, sr, sc, M, S); // // int query; // for (query = 0; query < Q; query++) { // int ar, ac, br, bc; // scanf("%d %d %d %d", &ar, &ac, &br, &bc); // printf("%d\n", colour(ar, ac, br, bc)); // } // // return 0; //}

Compilation message (stderr)

rainbow.cpp: In member function 'void range_tree::build()':
rainbow.cpp:34:19: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   34 |         for (auto [x, y, val]: work) {
      |                   ^
rainbow.cpp:37:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   37 |                 for (; z < BIT[x].size(); z += z & - z)
      |                        ~~^~~~~~~~~~~~~~~
rainbow.cpp: In function 'void init(int, int, int, int, int, char*)':
rainbow.cpp:75:15: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   75 |     for (auto [x, y]: s) {
      |               ^
rainbow.cpp:85:15: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   85 |     for (auto [x, y]: s) cnt[0].add(x, y, 1);
      |               ^
rainbow.cpp:86:15: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   86 |     for (auto [x, y]: V) cnt[1].add(x, y, 1);
      |               ^
rainbow.cpp:87:15: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   87 |     for (auto [x, y]: X) cnt[2].add(x, y, 1);
      |               ^
rainbow.cpp:88:15: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   88 |     for (auto [x, y]: Y) cnt[3].add(x, y, 1);
      |               ^
#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...