Submission #571374

#TimeUsernameProblemLanguageResultExecution timeMemory
571374kshitij_sodaniDistributing Candies (IOI21_candies)C++17
Compilation error
0 ms0 KiB
#include <bits/stdc++.h> using namespace std; typedef long long llo; #define a first #define b second #define pb push_back #define endl '\n' #include "candies.h" #include <vector> llo tree[4*200001][4]; llo lazy[4*200001]; //min //max //max-min vector<pair<int,int>> pre[200001]; vector<pair<int,int>> pre2[200001]; void push(int no,int l,int r){ tree[no][0]+=lazy[no]; tree[no][1]+=lazy[no]; if(l<r){ lazy[no*2+1]+=lazy[no]; lazy[no*2+2]+=lazy[no]; } lazy[no]=0; } void update(int no,int l,int r,int aa,int bb,int x){ push(no,l,r); if(l>bb or r<aa or aa>bb){ return; } if(aa<=l and r<=bb){ lazy[no]+=x; push(no,l,r); } else{ int mid=(l+r)/2; update(no*2+1,l,mid,aa,bb,x); update(no*2+2,mid+1,r,aa,bb,x); tree[no][0]=min(tree[no*2+1][0],tree[no*2+2][0]); tree[no][1]=max(tree[no*2+1][1],tree[no*2+2][1]); tree[no][2]=min(tree[no*2+1][2],tree[no*2+2][2]); tree[no][2]=min(tree[no][2],tree[no*2+2][0]-tree[no*2+1][1]); tree[no][3]=max(tree[no*2+1][3],tree[no*2+2][3]); tree[no][3]=max(tree[no][3],tree[no*2+2][1]-tree[no*2+1][0]); } } llo query(int no,int l,int r,int aa,int bb){ push(no,l,r); if(r<aa or l>bb or aa>bb){ return (llo)1e18; } if(aa<=l and r<=bb){ return tree[no][0]; } int mid=(l+r)/2; return min(query(no*2+1,l,mid,aa,bb),query(no*2+2,mid+1,r,aa,bb)); } std::vector<int> distribute_candies(std::vector<int> c, std::vector<int> l, std::vector<int> r, std::vector<int> v) { int n = c.size(); vector<int> ans; int q=l.size(); for(int i=0;i<q;i++){ pre[l[i]].pb({i,v[i]}); } for(int i=0;i<q;i++){ pre2[r[i]].pb({i,v[i]}); } llo su=0; for(int i=0;i<n;i++){ for(auto j:pre[i]){ update(0,0,q,j.a+1,q,j.b); su+=j.b; } llo ind=0; if(tree[0][2]<=-c[i]){ llo no=0; pair<llo,llo> cur={0,q}; llo ma=0; while(cur.a<cur.b){ int mid=(cur.a+cur.b)/2; llo ok=0; if(tree[no*2+2][0]-tree[no*2+1][1]<=-c[i]){ ok=1; } if(tree[no*2+2][2]<=-c[i]){ ok=1; } if(tree[no*2+2][2]-ma<=-c[i]){ ok=1; } if(ok==1){ ma=max(ma,tree[no*2+1][1]); cur={mid+1,cur.b}; no*=2; no+=2; continue; } cur={cur.a,mid}; no=no*2+1; } if(tree[no][0]-ma<=-c[i]){ ind=cur.a; } } llo ind2=0; if(tree[0][3]>=c[i]){ llo no=0; pair<llo,llo> cur={0,q}; llo ma=0; while(cur.a<cur.b){ /*if(i==2){ cout<<cur.a<<","<<cur.b<<endl; }*/ /*if(i==1){ cout<<cur.a<<","<<cur.b<<":"<<ma<<endl; }*/ int mid=(cur.a+cur.b)/2; push(no,cur.a,cur.b); push(no*2+1,cur.a,mid); push(no*2+2,mid+1,cur.b); llo ok=0; if(tree[no*2+2][1]-tree[no*2+1][0]>=c[i]){ ok=1; } /*if(i==2){ cout<<ok<<','<<endl; cout<<tree[no*2+2][1]-tree[no*2+1][0]<<"::"<<endl; }*/ if(tree[no*2+2][3]>=c[i]){ ok=1; } /* if(i==2){ cout<<ok<<','<<endl; }*/ if(tree[no*2+2][3]-ma>=c[i]){ ok=1; } /*if(i==2){ cout<<ok<<','<<endl; }*/ if(ok==1){ ma=min(ma,tree[no*2+1][0]); cur={mid+1,cur.b}; no*=2; no+=2; continue; } cur={cur.a,mid}; no=no*2+1; } if(i==2){ //cout<<no<<",,"<<endl; //cout<<tree[no][1]<<",,"<<ma<<endl; } if(tree[no][1]-ma>=c[i]){ ind2=cur.a; } //cout<<11<<endl; } //cout<<i<<":"<<ind<<":"<<ind2<<endl; assert(ind==0); ans2.pb(min(su,c[i])); continue; if(ind2>ind){ llo ans2=c[i]+su-query(0,0,q,ind2,ind2); ans.pb(ans2); } else{ llo ans2=su-query(0,0,q,ind,ind); ans.pb(ans2); } /*if(ind>q){ ans.pb(0); } else{ //query max suffx sum in ind+1,q range ans.pb(su-query(0,0,n-1,ind,q)); }*/ for(auto j:pre2[i]){ update(0,0,q,j.a+1,q,-j.b); su-=j.b; } } return ans; }

Compilation message (stderr)

candies.cpp: In function 'std::vector<int> distribute_candies(std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
candies.cpp:171:6: error: 'ans2' was not declared in this scope; did you mean 'ans'?
  171 |      ans2.pb(min(su,c[i]));
      |      ^~~~
      |      ans
candies.cpp:171:25: error: no matching function for call to 'min(llo&, __gnu_cxx::__alloc_traits<std::allocator<int>, int>::value_type&)'
  171 |      ans2.pb(min(su,c[i]));
      |                         ^
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:171:25: note:   deduced conflicting types for parameter 'const _Tp' ('long long int' and '__gnu_cxx::__alloc_traits<std::allocator<int>, int>::value_type' {aka 'int'})
  171 |      ans2.pb(min(su,c[i]));
      |                         ^
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:171:25: note:   deduced conflicting types for parameter 'const _Tp' ('long long int' and '__gnu_cxx::__alloc_traits<std::allocator<int>, int>::value_type' {aka 'int'})
  171 |      ans2.pb(min(su,c[i]));
      |                         ^
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:171:25: note:   mismatched types 'std::initializer_list<_Tp>' and 'long long int'
  171 |      ans2.pb(min(su,c[i]));
      |                         ^
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:171:25: note:   mismatched types 'std::initializer_list<_Tp>' and 'long long int'
  171 |      ans2.pb(min(su,c[i]));
      |                         ^