Submission #629829

#TimeUsernameProblemLanguageResultExecution timeMemory
629829VovamatrixCatfish Farm (IOI22_fish)C++17
61 / 100
1091 ms23240 KiB
//https://oj.uz/problem/view/IOI22_fish #include "fish.h" #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; #define ll long long #define pb push_back #define mp make_pair #define mt make_tuple #define fi first #define sc second #define th third #define fo fourth #define pii pair<int,int> #define pll pair<ll,ll> #define ldb double #define endl "\n" #define all(data) data.begin(),data.end() #define TYPEMAX(type) std::numeric_limits<type>::max() #define TYPEMIN(type) std::numeric_limits<type>::min() #define ima_li_te(D,d) find(all(D),d) #define MAXN 100007 #define MAXM 300007 ll dp[2][3][MAXN]; ll max_weights(int n, int m, vector<int> x, vector<int> y, vector<int> w) { vector<pair<int,ll>> v[n]; ll cnt=0; for(int i=0;i<m;i++) y[i]++; for(int i=0;i<m;i++) v[x[i]].pb(mp(y[i],w[i])); for(int i=0;i<n;i++) { v[i].pb(mp(0,0)); sort(all(v[i])); v[i].pb(mp(n+2,0)); for(int j=1;j<v[i].size();j++) v[i][j].sc+=v[i][j-1].sc; } for(int i=0;i<v[1].size();i++) { ll k=0; while(k+1<v[0].size() && v[1][i].fi>v[0][k+1].fi) k++; dp[1][2][i]=v[1].back().sc-v[1][max(i-1,0)].sc; dp[1][1][i]=v[0][k].sc; } for(int i=0;i<v[0].size();i++) { ll k=0; while(k+1<v[1].size() && v[0][i].fi>v[1][k+1].fi) k++; dp[1][0][i]=v[1][k].sc; } for(int i=2;i<n;i++) { for(int j=0;j<3;j++) { for(int k=0;k<max(v[i-1].size(),v[i].size());k++) dp[i&1][j][k]=0; } for(int j=0;j<v[i-1].size();j++) { ll k=0; while(k+1<v[i].size() && v[i-1][j].fi>v[i][k+1].fi) k++; dp[i&1][0][j]=max(dp[(i&1)^1][1][j],dp[(i&1)^1][2][j])+v[i][k].sc; } cnt=-1; for(int j=0;j<v[i].size();j++) { ll k=0,l=0,p=0; while(k<v[i-2].size() && v[i][j].fi>v[i-2][k].fi) { while(l<v[i-1].size()-1 && v[i-2][k].fi>v[i-1][l+1].fi) l++; cnt=max(cnt,dp[(i&1)^1][0][k]+v[i-1][l].sc); k++; } while(p<v[i-1].size()-1 && v[i][j].fi>v[i-1][p+1].fi) p++; dp[i&1][1][j]=max(dp[i&1][1][j],cnt-v[i-1][p].sc); } cnt=-1; for(int j=v[i].size()-1;j>=0;j--) { ll k=v[i-2].size()-1; while(k>=0 && v[i][j].fi<=v[i-2][k].fi) { cnt=max(cnt,dp[(i&1)^1][0][k]); k--; } dp[i&1][1][j]=max(dp[i&1][1][j],cnt); } cnt=-1; for(int j=0;j<v[i].size();j++) { ll k=0,l=0; while(k<v[i-1].size() && v[i][j].fi>=v[i-1][k].fi) { cnt=max(cnt, dp[(i&1)^1][1][k]-v[i-1][max(k-1,0ll)].sc); k++; } while(l<v[i-1].size()-1 && v[i][j].fi > v[i-1][l].fi) l++; dp[i&1][1][j]=max(dp[i&1][1][j],cnt+v[i-1][max(l-1,0ll)].sc); } cnt=-1; for(int j=v[i].size()-1;j>=0;j--) { ll k=v[i-1].size()-1,l=v[i].size()-1; while(k>=0 && v[i][j].fi<v[i-1][k].fi) { while(l>=1 && v[i-1][k].fi<=v[i][l].fi) l--; cnt=max(cnt,max(dp[(i&1)^1][1][k],dp[(i&1)^1][2][k])+v[i][l].sc); k--; } dp[i&1][2][j]=max(dp[i&1][2][j],cnt-v[i][max(j-1,0)].sc); } } ll rez=0; for(int i=0;i<v[n-2].size();i++) rez=max(rez,dp[(n-1)&1][0][i]); for(int i=1;i<3;i++) { for(int j=0;j<v[n-1].size();j++) rez=max(rez,dp[(n-1)&1][i][j]); } return rez; }

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:37: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]
   37 |         for(int j=1;j<v[i].size();j++) v[i][j].sc+=v[i][j-1].sc;
      |                     ~^~~~~~~~~~~~
fish.cpp:39:18: 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]
   39 |     for(int i=0;i<v[1].size();i++)
      |                 ~^~~~~~~~~~~~
fish.cpp:42:18: 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]
   42 |         while(k+1<v[0].size() && v[1][i].fi>v[0][k+1].fi) k++;
      |               ~~~^~~~~~~~~~~~
fish.cpp:46:18: 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]
   46 |     for(int i=0;i<v[0].size();i++)
      |                 ~^~~~~~~~~~~~
fish.cpp:49:18: 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]
   49 |         while(k+1<v[1].size() && v[0][i].fi>v[1][k+1].fi) k++;
      |               ~~~^~~~~~~~~~~~
fish.cpp:56:26: warning: comparison of integer expressions of different signedness: 'int' and 'const long unsigned int' [-Wsign-compare]
   56 |             for(int k=0;k<max(v[i-1].size(),v[i].size());k++) dp[i&1][j][k]=0;
      |                         ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fish.cpp:58: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]
   58 |         for(int j=0;j<v[i-1].size();j++)
      |                     ~^~~~~~~~~~~~~~
fish.cpp:61:22: 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]
   61 |             while(k+1<v[i].size() && v[i-1][j].fi>v[i][k+1].fi) k++;
      |                   ~~~^~~~~~~~~~~~
fish.cpp:65: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]
   65 |         for(int j=0;j<v[i].size();j++)
      |                     ~^~~~~~~~~~~~
fish.cpp:68:20: 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]
   68 |             while(k<v[i-2].size() && v[i][j].fi>v[i-2][k].fi)
      |                   ~^~~~~~~~~~~~~~
fish.cpp:70:24: 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]
   70 |                 while(l<v[i-1].size()-1 && v[i-2][k].fi>v[i-1][l+1].fi) l++;
      |                       ~^~~~~~~~~~~~~~~~
fish.cpp:74:20: 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]
   74 |             while(p<v[i-1].size()-1 && v[i][j].fi>v[i-1][p+1].fi) p++;
      |                   ~^~~~~~~~~~~~~~~~
fish.cpp:89: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]
   89 |         for(int j=0;j<v[i].size();j++)
      |                     ~^~~~~~~~~~~~
fish.cpp:92:20: 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]
   92 |             while(k<v[i-1].size() && v[i][j].fi>=v[i-1][k].fi)
      |                   ~^~~~~~~~~~~~~~
fish.cpp:97:20: 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]
   97 |             while(l<v[i-1].size()-1 && v[i][j].fi > v[i-1][l].fi) l++;
      |                   ~^~~~~~~~~~~~~~~~
fish.cpp:114:18: 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]
  114 |     for(int i=0;i<v[n-2].size();i++) rez=max(rez,dp[(n-1)&1][0][i]);
      |                 ~^~~~~~~~~~~~~~
fish.cpp:117: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]
  117 |         for(int j=0;j<v[n-1].size();j++) rez=max(rez,dp[(n-1)&1][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...