답안 #629817

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
629817 2022-08-15T08:13:17 Z Vovamatrix 메기 농장 (IOI22_fish) C++17
컴파일 오류
0 ms 0 KB
//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 sol(int n, int m, vector<int> x, vector<int> y, vector<int> w)
{
    vector<pll> 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>0 && 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

fish.cpp: In function 'long long int sol(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<long long 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<long long 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<long long 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<long long 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<long long 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<long long 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<long long 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<long long 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<long long 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<long long 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<long long 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<long long 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<long long 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<long long 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<long long 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<long long 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]);
      |                     ~^~~~~~~~~~~~~~
/usr/bin/ld: /tmp/ccG4NIvr.o: in function `main':
grader.cpp:(.text.startup+0x25e): undefined reference to `max_weights(int, int, std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >)'
collect2: error: ld returned 1 exit status