Submission #576175

#TimeUsernameProblemLanguageResultExecution timeMemory
576175ogibogi2004Wiring (IOI17_wiring)C++14
Compilation error
0 ms0 KiB
#include "wiring.h" #include <bits/stdc++.h> using namespace std; #define ll long long const ll INF=1e18; struct bucket { bool col; vector<ll> pos; vector<ll> dp; }; vector<bucket>v; struct segment_tree { vector<ll>t; int n; void init(int sz) { n=sz; t.resize(4*sz); for(int i=0;i<4*sz;i++)t[i]=INF; } void update(int l,int r,int idx,int q,ll val) { if(l>q)return; if(r<q)return; if(l==r) { t[idx]=val; return; } int mid=(l+r)/2; update(l,mid,idx*2,q,val); update(mid+1,r,idx*2+1,q,val); t[idx]=min(t[idx*2],t[idx*2+1]); } void update(int idx,int val) { update(0,n,1,idx,val); } ll query(int l,int r,int idx,int ql,int qr) { if(l>qr)return INF; if(r<ql)return INF; if(l>=ql&&r<=qr)return t[idx]; int mid=(l+r)/2; return min(query(l,mid,idx*2,ql,qr),query(mid+1,r,idx*2+1,ql,qr)); } ll query(int l,int r) { return query(0,n,1,l,r); } }; long long min_total_length(vector<int> r, vector<int> b) { vector<pair<ll,bool> >all; for(ll i=0;i<r.size();i++) { all.push_back({r[i],0}); } for(ll i=0;i<b.size();i++) { all.push_back({b[i],1}); } sort(all.begin(),all.end()); bucket last; last.col=all[0].second; last.pos={all[0].first}; for(ll i=1;i<all.size();i++) { if(all[i].second==all[i-1].second) { last.pos.push_back(all[i].first); } else { v.push_back(last); last.col=all[i].second; last.pos={all[i].first}; } } v.push_back(last); v[0].dp.push_back(0); for(ll i=0;i<v[0].pos.size();i++)v[0].dp.push_back(INF); /*for(int j=0;j<v[0].dp.size();j++)cout<<v[0].dp[j]<<" "; cout<<endl;*/ for(ll i=1;i<v.size();i++) { vector<ll>prefmin(v[i-1].pos.size()+3,INF),sufmin(v[i-1].pos.size()+3,INF); ll sufsum=0; for(ll j=v[i-1].pos.size();j>=0;j--) { if(j!=v[i-1].pos.size())sufsum+=v[i-1].pos[j]; sufmin[j]=min((ll)sufmin[j+1],(ll)(v[i-1].dp[j]-sufsum+(v[i-1].pos.size()-j)*v[i-1].pos.back())); } ll prefsum=sufsum; prefmin[0]=v[i-1].dp[0]-prefsum+v[i-1].pos.size()*v[i].pos[0]; for(ll j=1;j<=v[i-1].pos.size();j++) { prefsum-=v[i-1].pos[j-1]; prefmin[j]=min((ll)prefmin[j-1],(ll)(v[i-1].dp[j]-prefsum+(v[i-1].pos.size()-j)*v[i].pos[0])); } /*cout<<"prefmin : "; for(int j=0;j<prefmin.size();j++)cout<<prefmin[j]<<" "; cout<<endl; cout<<"sufmin : "; for(int j=0;j<sufmin.size();j++)cout<<sufmin[j]<<" "; cout<<endl;*/ for(ll j=0;j<=v[i].pos.size();j++)v[i].dp.push_back(INF); prefsum=0; for(ll j=0;j<=v[i].pos.size();j++) { if(j!=0)prefsum+=v[i].pos[j-1]; // we will chose first j from this bucket // connect them with last k from prev bucket // first case : k <= j // k=0,1,...j // v[i].dp[j]=min(v[i].dp[j],sufmin[v[i-1].pos.size()-j]+prefsum+(j-k)*v[i].pos[0]); //cout<<"^^ "<<j<<" "<<sufmin[max(0,(int)v[i-1].pos.size()-j)]+prefsum-j*v[i-1].pos.back()<<endl; v[i].dp[j]=min(v[i].dp[j],sufmin[max(0,(ll)v[i-1].pos.size()-j)]+prefsum-j*v[i-1].pos.back()); //second case : k > j // k = j+1,....,v[i-1].pos.size() // v[i].dp[j]=min(v[i].dp[j],prefmin[v[i].pos-j-1]+prefsum-j*v[i-1].pos.back()); if((ll)(v[i-1].pos.size()-j-1)>=0) { v[i].dp[j]=min((ll)v[i].dp[j],(ll)(prefmin[v[i-1].pos.size()-j-1]+prefsum-j*v[i].pos[0])); //cout<<"^^^ "<<j<<" "<<prefmin[v[i-1].pos.size()-j-1]+prefsum-j*v[i].pos[0]<<" "<<prefmin[v[i-1].pos.size()-j-1]<<" "<<prefsum<<" "<<j*v[i].pos[0]<<" "<<v[i-1].pos.size()-j-1<<endl; } } //for(int j=0;j<v[i].dp.size();j++)cout<<v[i].dp[j]<<" "; //cout<<endl; } //cout<<v.back().dp.back()<<endl; return v.back().dp.back(); }

Compilation message (stderr)

wiring.cpp: In function 'long long int min_total_length(std::vector<int>, std::vector<int>)':
wiring.cpp:56:17: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   56 |     for(ll i=0;i<r.size();i++)
      |                ~^~~~~~~~~
wiring.cpp:60:17: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   60 |     for(ll i=0;i<b.size();i++)
      |                ~^~~~~~~~~
wiring.cpp:68:17: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, bool> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   68 |     for(ll i=1;i<all.size();i++)
      |                ~^~~~~~~~~~~
wiring.cpp:83:17: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   83 |     for(ll i=0;i<v[0].pos.size();i++)v[0].dp.push_back(INF);
      |                ~^~~~~~~~~~~~~~~~
wiring.cpp:86:17: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<bucket>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   86 |     for(ll i=1;i<v.size();i++)
      |                ~^~~~~~~~~
wiring.cpp:92:17: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   92 |             if(j!=v[i-1].pos.size())sufsum+=v[i-1].pos[j];
      |                ~^~~~~~~~~~~~~~~~~~~
wiring.cpp:97:21: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   97 |         for(ll j=1;j<=v[i-1].pos.size();j++)
      |                    ~^~~~~~~~~~~~~~~~~~~
wiring.cpp:108:21: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  108 |         for(ll j=0;j<=v[i].pos.size();j++)v[i].dp.push_back(INF);
      |                    ~^~~~~~~~~~~~~~~~~
wiring.cpp:110:21: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  110 |         for(ll j=0;j<=v[i].pos.size();j++)
      |                    ~^~~~~~~~~~~~~~~~~
wiring.cpp:119:75: error: no matching function for call to 'max(int, long long int)'
  119 |             v[i].dp[j]=min(v[i].dp[j],sufmin[max(0,(ll)v[i-1].pos.size()-j)]+prefsum-j*v[i-1].pos.back());
      |                                                                           ^
In file included from /usr/include/c++/10/vector:60,
                 from wiring.h:1,
                 from wiring.cpp:1:
/usr/include/c++/10/bits/stl_algobase.h:254:5: note: candidate: 'template<class _Tp> constexpr const _Tp& std::max(const _Tp&, const _Tp&)'
  254 |     max(const _Tp& __a, const _Tp& __b)
      |     ^~~
/usr/include/c++/10/bits/stl_algobase.h:254:5: note:   template argument deduction/substitution failed:
wiring.cpp:119:75: note:   deduced conflicting types for parameter 'const _Tp' ('int' and 'long long int')
  119 |             v[i].dp[j]=min(v[i].dp[j],sufmin[max(0,(ll)v[i-1].pos.size()-j)]+prefsum-j*v[i-1].pos.back());
      |                                                                           ^
In file included from /usr/include/c++/10/vector:60,
                 from wiring.h:1,
                 from wiring.cpp:1:
/usr/include/c++/10/bits/stl_algobase.h:300:5: note: candidate: 'template<class _Tp, class _Compare> constexpr const _Tp& std::max(const _Tp&, const _Tp&, _Compare)'
  300 |     max(const _Tp& __a, const _Tp& __b, _Compare __comp)
      |     ^~~
/usr/include/c++/10/bits/stl_algobase.h:300:5: note:   template argument deduction/substitution failed:
wiring.cpp:119:75: note:   deduced conflicting types for parameter 'const _Tp' ('int' and 'long long int')
  119 |             v[i].dp[j]=min(v[i].dp[j],sufmin[max(0,(ll)v[i-1].pos.size()-j)]+prefsum-j*v[i-1].pos.back());
      |                                                                           ^
In file included from /usr/include/c++/10/algorithm:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:65,
                 from wiring.cpp:2:
/usr/include/c++/10/bits/stl_algo.h:3480:5: note: candidate: 'template<class _Tp> constexpr _Tp std::max(std::initializer_list<_Tp>)'
 3480 |     max(initializer_list<_Tp> __l)
      |     ^~~
/usr/include/c++/10/bits/stl_algo.h:3480:5: note:   template argument deduction/substitution failed:
wiring.cpp:119:75: note:   mismatched types 'std::initializer_list<_Tp>' and 'int'
  119 |             v[i].dp[j]=min(v[i].dp[j],sufmin[max(0,(ll)v[i-1].pos.size()-j)]+prefsum-j*v[i-1].pos.back());
      |                                                                           ^
In file included from /usr/include/c++/10/algorithm:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:65,
                 from wiring.cpp:2:
/usr/include/c++/10/bits/stl_algo.h:3486:5: note: candidate: 'template<class _Tp, class _Compare> constexpr _Tp std::max(std::initializer_list<_Tp>, _Compare)'
 3486 |     max(initializer_list<_Tp> __l, _Compare __comp)
      |     ^~~
/usr/include/c++/10/bits/stl_algo.h:3486:5: note:   template argument deduction/substitution failed:
wiring.cpp:119:75: note:   mismatched types 'std::initializer_list<_Tp>' and 'int'
  119 |             v[i].dp[j]=min(v[i].dp[j],sufmin[max(0,(ll)v[i-1].pos.size()-j)]+prefsum-j*v[i-1].pos.back());
      |                                                                           ^