제출 #639772

#제출 시각아이디문제언어결과실행 시간메모리
639772studyCatfish Farm (IOI22_fish)C++17
100 / 100
296 ms84064 KiB
#include <bits/stdc++.h> #include "fish.h" using namespace std; const int MAXN = 1e5+1; vector<long long> dp[3][MAXN]; vector<pair<int,long long>> grid[MAXN],init[MAXN]; long long max_weights(int N, int M, vector<int> X, vector<int> Y,vector<int> W){ for (int i=0; i<N; ++i) grid[i].emplace_back(0,0); for (int i=0; i<M; ++i){ Y[i]++; init[X[i]].emplace_back(Y[i],W[i]); if (X[i]-1 >= 0) init[X[i]-1].emplace_back(Y[i],0); if (X[i]+1 < N) init[X[i]+1].emplace_back(Y[i],0); } for (int i=0; i<N; ++i){ sort(init[i].begin(),init[i].end()); for (auto k:init[i]){ if (grid[i].back().first == k.first) grid[i].back().second += k.second; else grid[i].emplace_back(k); } } dp[0][0] = vector<long long>(grid[0].size()); dp[1][0] = vector<long long>(grid[0].size()); dp[2][0].emplace_back(0); long long ans = 0; for (int x=1; x<N; ++x){ int siz = grid[x].size(); dp[0][x] = vector<long long>(siz); dp[1][x] = vector<long long>(siz); dp[2][x].emplace_back(0); long long sum = 0, best = 0, sum2 = 0, sum3 = 0, idx2 = 0; for (int idx=0; idx<grid[x].size(); ++idx){ while (idx2 < grid[x-1].size() and grid[x-1][idx2].first <= grid[x][idx].first){ sum += grid[x-1][idx2].second; sum = max(sum,dp[1][x-1][idx2]); idx2++; } if (idx == 0) sum = max(sum,dp[2][x-1][0]); if (idx == 0) best = max(best,dp[0][x-1][0]); dp[1][x][idx] = max(best,sum); ans = max({best,sum,ans}); } idx2 = grid[x-1].size()-1; for (int idx=grid[x].size()-1; idx>=0; --idx){ while (idx2 >= 0 and grid[x-1][idx2].first >= grid[x][idx].first){ sum2 = max({sum2,dp[1][x-1][idx2],dp[0][x-1][idx2]}); sum3 = max({sum3,dp[1][x-1][idx2],dp[0][x-1][idx2]}); idx2--; } dp[0][x][idx] = sum2; dp[2][x][0] = max(dp[2][x][0],sum3); ans = max({ans,sum2,dp[2][x][0]}); sum2 += grid[x][idx].second; } } return ans; }

컴파일 시 표준 에러 (stderr) 메시지

fish.cpp: In function 'long long int max_weights(int, int, std::vector<int>, std::vector<int>, std::vector<int>)':
fish.cpp:35:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |   for (int idx=0; idx<grid[x].size(); ++idx){
      |                   ~~~^~~~~~~~~~~~~~~
fish.cpp:36:16: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   36 |    while (idx2 < grid[x-1].size() and grid[x-1][idx2].first <= grid[x][idx].first){
      |           ~~~~~^~~~~~~~~~~~~~~~~~
#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...