제출 #1009653

#제출 시각아이디문제언어결과실행 시간메모리
1009653aaaaaarrozMeetings (IOI18_meetings)C++17
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; struct nodo{ ll suma; ll respuesta; ll prefijo; ll sufijo; }; template<class T> struct SegmentTree{ T (*merge)(T, T); ll n; vector<T>ST; void build(ll i, ll l, ll r, vector<T> &values){ if (l == r){ ST[i] = values[l]; return; } build(i * 2, l, (l + r) / 2, values); build(i * 2 + 1, (l + r) / 2 + 1, r, values); ST[i] = merge(ST[i * 2], ST[i * 2 + 1]); } SegmentTree(vector<T> &values, T (*merge)(T a, T b)) : merge(merge){ n = values.size(); ST.resize(n << 2 | 3); build(1, 0, n - 1, values); } void update(ll i, ll l, ll r, ll pos, T val){ if (r < pos or l > pos) return; if (l == r){ ST[i] = val; return; } update(i << 1, l, (l + r) >> 1, pos, val); update(i << 1 | 1, (l + r) / 2 + 1, r, pos, val); ST[i] = merge(ST[i << 1], ST[i << 1 | 1]); } void update(ll pos, T val){ update(1, 0, n - 1, pos, val); } T query(ll i, ll l, ll r, ll a, ll b){ if (l >= a and r <= b) return ST[i]; ll mid = (l + r) >> 1; if (mid < a) return query(i << 1 | 1, mid + 1, r, a, b); if (mid >= b) return query(i << 1, l, mid, a, b); return merge(query(i << 1, l, mid, a, b), query(i << 1 | 1, mid + 1, r, a, b)); } T query(ll a, ll b){ if (a > b) return merge(query(1, 0, n - 1, 0, b), query(1, 0, n - 1, a, n - 1)); return query(1, 0, n - 1, a, b); } }; nodo merge(nodo a,nodo b){ nodo c; c.suma=a.suma+b.suma; c.prefijo=max(a.prefijo,a.suma+b.prefijo); c.sufijo=max(b.sufijo,b.suma+a.sufijo); c.respuesta=max({a.sufijo+b.prefijo,a.respuesta,b.respuesta}); return c; } vector<ll> minimum_costs(vector<int> H, vector<int> L,vector<int> R) { ll n=H.size(); ll Q = L.size(); vector<ll> C(Q); vector<ll>nuevo=H; for(ll i=0;i<n;i++){ if(nuevo[i]==2){ nuevo[i]=-INT_MAX; } } SegmentTree<nodo>st(nuevo,merge); for(ll q=0;q<Q;q++){ ll l=L[q]; ll r=R[q]; ll maxsequenceofones=st.query(l,r); if(maxsequenceofones<=0){ C[q]=2*(r-l+1); } else{ ll falta=(r-l+1)-(maxsequenceofones); C[q]=(maxsequenceofones+(2*falta)); } } return C; }

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

meetings.cpp: In function 'std::vector<long long int> minimum_costs(std::vector<int>, std::vector<int>, std::vector<int>)':
meetings.cpp:74:19: error: conversion from 'vector<int>' to non-scalar type 'vector<long long int>' requested
   74 |   vector<ll>nuevo=H;
      |                   ^
meetings.cpp:80:34: error: no matching function for call to 'SegmentTree<nodo>::SegmentTree(std::vector<long long int>&, <unresolved overloaded function type>)'
   80 |   SegmentTree<nodo>st(nuevo,merge);
      |                                  ^
meetings.cpp:25:2: note: candidate: 'SegmentTree<T>::SegmentTree(std::vector<_Tp>&, T (*)(T, T)) [with T = nodo]'
   25 |  SegmentTree(vector<T> &values, T (*merge)(T a, T b)) : merge(merge){
      |  ^~~~~~~~~~~
meetings.cpp:25:25: note:   no known conversion for argument 1 from 'std::vector<long long int>' to 'std::vector<nodo, std::allocator<nodo> >&'
   25 |  SegmentTree(vector<T> &values, T (*merge)(T a, T b)) : merge(merge){
      |              ~~~~~~~~~~~^~~~~~
meetings.cpp:11:8: note: candidate: 'SegmentTree<nodo>::SegmentTree(const SegmentTree<nodo>&)'
   11 | struct SegmentTree{
      |        ^~~~~~~~~~~
meetings.cpp:11:8: note:   candidate expects 1 argument, 2 provided
meetings.cpp:11:8: note: candidate: 'SegmentTree<nodo>::SegmentTree(SegmentTree<nodo>&&)'
meetings.cpp:11:8: note:   candidate expects 1 argument, 2 provided
meetings.cpp:84:33: error: cannot convert 'nodo' to 'll' {aka 'long long int'} in initialization
   84 |    ll maxsequenceofones=st.query(l,r);
      |                         ~~~~~~~~^~~~~
      |                                 |
      |                                 nodo