Submission #770588

#TimeUsernameProblemLanguageResultExecution timeMemory
770588josanneo22Catfish Farm (IOI22_fish)C++17
100 / 100
136 ms27244 KiB
//#include "fish.h" #include<bits/stdc++.h> using namespace std; #define ll long long const int maxn = 1e5 + 500; vector<ll> col[maxn]; long long max_weights(int n, int m, vector<int> x, vector<int> y, vector<int> w) { for (int i = 0; i < m; i++) { col[x[i]].push_back(i); } for (int i = 0; i < n; i++) { sort(col[i].begin(), col[i].end(), [&](int i, int j) { return y[i] < y[j]; }); } vector<ll> up(m, 0), down(m, 0); vector<ll> up_max(n, 0), down_max(n, 0); for(int i = 0; i < n; i++) { if (col[i].size() == 0) {//empty col if (i == 0) up_max[i] = down_max[i] = 0; else up_max[i] = up_max[i - 1], down_max[i] = down_max[i - 1]; continue; } ll mx = (i < 2) ? 0LL : max(up_max[i - 2], down_max[i - 1]); for (int j = 0; j < col[i].size(); j++) { if (j == 0) up[col[i][0]] = mx + w[col[i][0]]; else up[col[i][j]] = w[col[i][j]] + up[col[i][j - 1]]; } if (i > 0) { //delete i-1 column mx = (i < 2) ? 0LL : max(up_max[i - 2], down_max[i - 2]);//must make sure that it has at last two columns in front for (int j = col[i].size() - 1; j >= 0; --j) { if (j == col[i].size() - 1) down[col[i][j]] = mx + w[col[i][j]]; else down[col[i][j]] = down[col[i][j + 1]] + w[col[i][j]]; } } //case 2: actually using the previous column if (i > 0 && col[i - 1].size() > 0) {//make sure that i-1 col isn't empty int p=-1, x = col[i - 1].size(); for (int j = 0; j < col[i].size(); j++) { //p records last index of col that has y coordinate less than current calculation while (p < x - 1 && y[col[i - 1][p + 1]] < y[col[i][j]]) p++; if (p == -1) continue;//nothing if (j == 0) up[col[i][j]] = max(up[col[i][j]], up[col[i - 1][p]] + w[col[i][j]]); else { up[col[i][j]] = max({ up[col[i][j]],//just put to update max up[col[i - 1][p]] + w[col[i][j]],//build on last col, with height p up[col[i][j - 1]] + w[col[i][j]] });// build strictly below it } } p = x;//this is down and almost similar just from top to bottom instead if (i > 1) { for (int j = col[i].size() - 1; j >= 0; j--) { while (p > 0 && y[col[i - 1][p - 1]] > y[col[i][j]]) p--; if (p == x) continue; if (j == col[i].size() - 1) down[col[i][j]] = max(down[col[i][j]], down[col[i - 1][p]] + w[col[i][j]]); else { down[col[i][j]] = max(down[col[i][j]], max(down[col[i - 1][p]], down[col[i][j + 1]]) + w[col[i][j]]); } } } } //update max if (i == 0) { up_max[i] = up[col[i][col[i].size() - 1]]; down_max[i] = down[col[i][0]]; } else { up_max[i] = max(up_max[i - 1], up[col[i][col[i].size() - 1]]); down_max[i] = max(down_max[i - 1], down[col[i][0]]); } } return max(up_max[n - 2], down_max[n - 1]); }

Compilation message (stderr)

fish.cpp: In function 'long long int max_weights(int, int, std::vector<int>, std::vector<int>, std::vector<int>)':
fish.cpp:25:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   25 |   for (int j = 0; j < col[i].size(); j++) {
      |                   ~~^~~~~~~~~~~~~~~
fish.cpp:33:11: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   33 |     if (j == col[i].size() - 1) down[col[i][j]] = mx + w[col[i][j]];
      |         ~~^~~~~~~~~~~~~~~~~~~~
fish.cpp:40:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   40 |             for (int j = 0; j < col[i].size(); j++) {
      |                             ~~^~~~~~~~~~~~~~~
fish.cpp:56:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   56 |                     if (j == col[i].size() - 1) down[col[i][j]] = max(down[col[i][j]], down[col[i - 1][p]] + w[col[i][j]]);
      |                         ~~^~~~~~~~~~~~~~~~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...