제출 #1053226

#제출 시각아이디문제언어결과실행 시간메모리
1053226epicci23사탕 분배 (IOI21_candies)C++17
컴파일 에러
0 ms0 KiB
#include "bits/stdc++.h" #include "candies.h" //#define int long long #define all(v) v.begin() , v.end() #define sz(a) (int)a.size() using namespace std; const long long INF = 1e18; struct SegT_Min{ int n; vector<long long> t; SegT_Min(int nn){ n=nn; t.assign(4*n+5,INF); } void upd(int rt,int l,int r,int ind,long long u){ if(r<ind || l>ind) return; if(l==r){ t[rt]=min(t[rt],u); return; } int m=(l+r)/2; upd(rt*2,l,m,ind,u),upd(rt*2+1,m+1,r,ind,u); t[rt]=min(t[rt*2],t[rt*2+1]); } long long query(int rt,int l,int r,int gl,int gr){ if(r<gl || l>gr) return INF; if(l>=gl && r<=gr) return t[rt]; int m=(l+r)/2; return min(query(rt*2,l,m,gl,gr),query(rt*2+1,m+1,r,gl,gr)); } }; struct SegT_Max{ int n; vector<long long> t; SegT_Max(int nn){ n=nn; t.assign(4*n+5,-INF); } void upd(int rt,int l,int r,int ind,long long u){ if(r<ind || l>ind) return; if(l==r){ t[rt]=max(t[rt],u); return; } int m=(l+r)/2; upd(rt*2,l,m,ind,u),upd(rt*2+1,m+1,r,ind,u); t[rt]=max(t[rt*2],t[rt*2+1]); } long long query(int rt,int l,int r,int gl,int gr){ if(r<gl || l>gr) return -INF; if(l>=gl && r<=gr) return t[rt]; int m=(l+r)/2; return max(query(rt*2,l,m,gl,gr),query(rt*2+1,m+1,r,gl,gr)); } }; vector<int> distribute_candies(vector<int> C, vector<int> L, vector<int> R, vector<int> V) { int n=sz(c),q=sz(V); vector<int> ans(n); vector<array<long long,2>> c; for(int i=0;i<n;i++) c.push_back({C[i],i}); sort(all(c)); long long pre[q+5]; pre[0]=0; for(int i=1;i<=q;i++) pre[i]=pre[i-1]+V[i-1]; SegT_Min t1(q);SegT_Max t2(q); for(int i=0;i<=q;i++){ t1.upd(1,1,q,i,pre[i]); t2.upd(1,1,q,i,pre[i]); } int p=0; long long cur=0; for(int i=n-1;i>=0;i--){ int cap=c[i][0]; cur=min(cur,cap); while(p<q){ int l=p+1,r=q+1; while(l<r){ int m=(l+r)/2; if(t1.query(1,1,q,p+1,m)<=pre[p]-cur) r=m; else l=m+1; } int ans0=l; l=p+1,r=q+1; while(l<r){ int m=(l+r)/2; if(t2.query(1,1,q,p+1,m)>=cap-cur-pre[p]) r=m; else l=m+1; } int ansm=l; if(ansm==q+1 && ans0==q+1) break; p=min(ansm,ans0); if(ans0<=ansm) cur=0; else cur=cap; } ans[c[i][1]]=cur+pre[q]-pre[p]; } return ans; } /*void _(){ int n,q; cin >> n >> q; vector<array<int,2>> c; for(int i=1;i<=n;i++){ int a;cin >> a; c.push_back({a,i}); } int xd[q+5],ans[n+5],pre[q+5]; pre[0]=0; for(int i=1;i<=q;i++){ cin >> xd[i]; pre[i]=pre[i-1]+xd[i]; } sort(all(c)); SegT_Min t1(q);SegT_Max t2(q); for(int i=0;i<=q;i++){ t1.upd(1,1,q,i,pre[i]); t2.upd(1,1,q,i,pre[i]); } int p=0,cur=0; for(int i=n-1;i>=0;i--){ int cap=c[i][0]; cur=min(cur,cap); while(p<q){ int l=p+1,r=q+1; while(l<r){ int m=(l+r)/2; if(t1.query(1,1,q,p+1,m)<=pre[p]-cur) r=m; else l=m+1; } int ans0=l; l=p+1,r=q+1; while(l<r){ int m=(l+r)/2; if(t2.query(1,1,q,p+1,m)>=cap-cur-pre[p]) r=m; else l=m+1; } int ansm=l; if(ansm==q+1 && ans0==q+1) break; p=min(ansm,ans0); if(ans0<=ansm) cur=0; else cur=cap; } ans[c[i][1]]=cur+pre[q]-pre[p]; } for(int i=1;i<=n;i++) cout << ans[i] << " \n"[i==n]; } int32_t main(){ cin.tie(0); ios::sync_with_stdio(0); int tc=1;//cin >> tc; while(tc--) _(); return 0; }*/

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

candies.cpp: In function 'std::vector<int> distribute_candies(std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
candies.cpp:62:14: error: 'c' was not declared in this scope
   62 |     int n=sz(c),q=sz(V);
      |              ^
candies.cpp:5:20: note: in definition of macro 'sz'
    5 | #define sz(a) (int)a.size()
      |                    ^
candies.cpp:67:19: error: 'q' was not declared in this scope
   67 |     long long pre[q+5];
      |                   ^
candies.cpp:68:5: error: 'pre' was not declared in this scope
   68 |     pre[0]=0;
      |     ^~~
candies.cpp:80:19: error: no matching function for call to 'min(long long int&, int&)'
   80 |    cur=min(cur,cap);
      |                   ^
In file included from /usr/include/c++/10/bits/specfun.h:45,
                 from /usr/include/c++/10/cmath:1927,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:41,
                 from candies.cpp:1:
/usr/include/c++/10/bits/stl_algobase.h:230:5: note: candidate: 'template<class _Tp> constexpr const _Tp& std::min(const _Tp&, const _Tp&)'
  230 |     min(const _Tp& __a, const _Tp& __b)
      |     ^~~
/usr/include/c++/10/bits/stl_algobase.h:230:5: note:   template argument deduction/substitution failed:
candies.cpp:80:19: note:   deduced conflicting types for parameter 'const _Tp' ('long long int' and 'int')
   80 |    cur=min(cur,cap);
      |                   ^
In file included from /usr/include/c++/10/bits/specfun.h:45,
                 from /usr/include/c++/10/cmath:1927,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:41,
                 from candies.cpp:1:
/usr/include/c++/10/bits/stl_algobase.h:278:5: note: candidate: 'template<class _Tp, class _Compare> constexpr const _Tp& std::min(const _Tp&, const _Tp&, _Compare)'
  278 |     min(const _Tp& __a, const _Tp& __b, _Compare __comp)
      |     ^~~
/usr/include/c++/10/bits/stl_algobase.h:278:5: note:   template argument deduction/substitution failed:
candies.cpp:80:19: note:   deduced conflicting types for parameter 'const _Tp' ('long long int' and 'int')
   80 |    cur=min(cur,cap);
      |                   ^
In file included from /usr/include/c++/10/algorithm:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:65,
                 from candies.cpp:1:
/usr/include/c++/10/bits/stl_algo.h:3468:5: note: candidate: 'template<class _Tp> constexpr _Tp std::min(std::initializer_list<_Tp>)'
 3468 |     min(initializer_list<_Tp> __l)
      |     ^~~
/usr/include/c++/10/bits/stl_algo.h:3468:5: note:   template argument deduction/substitution failed:
candies.cpp:80:19: note:   mismatched types 'std::initializer_list<_Tp>' and 'long long int'
   80 |    cur=min(cur,cap);
      |                   ^
In file included from /usr/include/c++/10/algorithm:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:65,
                 from candies.cpp:1:
/usr/include/c++/10/bits/stl_algo.h:3474:5: note: candidate: 'template<class _Tp, class _Compare> constexpr _Tp std::min(std::initializer_list<_Tp>, _Compare)'
 3474 |     min(initializer_list<_Tp> __l, _Compare __comp)
      |     ^~~
/usr/include/c++/10/bits/stl_algo.h:3474:5: note:   template argument deduction/substitution failed:
candies.cpp:80:19: note:   mismatched types 'std::initializer_list<_Tp>' and 'long long int'
   80 |    cur=min(cur,cap);
      |                   ^