Submission #944140

# Submission time Handle Problem Language Result Execution time Memory
944140 2024-03-12T08:58:21 Z teacup Meetings (IOI18_meetings) C++17
Compilation error
0 ms 0 KB
#include "meetings.h"
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define ii pair<int,int>
typedef vector<int> vi;
#define iii tuple<int,int,int>
typedef vector<ii> vii;
typedef vector<iii> viii;
typedef map<int,int> mii;

#ifndef debug 
    #define cerr if (0) cerr
#endif

const int INF=1e17;

int A[5005];
struct node {
    int s, e;
    int mn, mx, sum, add_val, set_val;
    bool lset;
    node *l, *r;
    node (int _s, int _e, int A[] = NULL): s(_s), e(_e), mn(0), mx(0), sum(0), lset(0), add_val(0), set_val(0), l(NULL), r(NULL) {
        if (A == NULL) return;
        if (s == e) mn = mx = sum = A[s];
        else {
            l = new node(s, (s+e)>>1, A), r = new node((s+e+2)>>1, e, A);
            combine();
        }
    }
    void create_children() {
        if (s == e) return;
        if (l != NULL) return;
        int m = (s+e)>>1;
        l = new node(s, m);
        r = new node(m+1, e);
    }
    void self_set(int v) {
        lset = 1;
        mn = mx = set_val = v;
        sum = v * (e-s+1);
        add_val = 0;
    }
    void self_add(int v) {
        if (lset) { self_set(v + set_val); return; }
        mn += v, mx += v, add_val += v;
        sum += v*(e-s+1);
    }
    void lazy_propagate() {
        if (s == e) return;
        if (lset) {
            l->self_set(set_val), r->self_set(set_val);
            lset = set_val = 0;
        }   
        if (add_val != 0) {
            l->self_add(add_val), r->self_add(add_val);
            add_val = 0;
        }
    }
    void combine() {
        if (l == NULL) return;
        sum = l->sum + r->sum;
        mn = min(l->mn, r->mn);
        mx = max(l->mx, r->mx);
    }
    #define UPDATE(name)\
    void name(int x, int y, int v) { \
        if (s == x && e == y) { self_##name(v); return; } \
        int m = (s+e)>>1; \
        create_children(); lazy_propagate(); \
        if (x <= m) l->name(x, min(y, m), v); \
        if (y > m) r->name(max(x, m+1), y, v); \
        combine(); \
    }
    UPDATE(add)                 //generates add
    UPDATE(set)                 //generates set
    #define QUERY(name, fn, var, lazyfn)\
    int range_##name(int x, int y) {\
        if (s == x && e == y) return var; \
        if (l == NULL || lset) return lazyfn(var);\
        int m = (s+e)>>1; lazy_propagate(); \
        if (y <= m) return l->range_##name(x, y); \
        if (x > m) return r->range_##name(x, y); \
        return fn(l->range_##name(x, m), r->range_##name(m+1, y)) ; \
    }
    #define SAME(var) (var)
    #define PART(var) ((var) /(e-s+1) * (y-x+1)) 
    #define SUM(a, b) ((a)+(b))
    QUERY(min, min, mn, SAME)   //generates range_min
    QUERY(max, max, mx, SAME)   //generates range_max
    QUERY(sum, SUM, sum, PART)  //generates range_sum
    ~node() {
        if (l != NULL) delete l;
        if (r != NULL) delete r;
    }
} *root;

vi minimum_costs(vector<int32_t> H, vector<int32_t> L,
                                     vector<int32_t> R) {
	int Q = L.size(), N = H.size();
	vi C;
	for (int i=0; i<H.size(); i++) A[i]=H[i];
	root = new node(1, H.size()+5, A);
	for (int _=0; _<Q; _++){
		int L_ = L[_], R_ = R[_], actual_ans=INF;
		for (int i=L_; i<=R_; i++){
			int ans=0;
            memset(A,0,sizeof(A));
			for (int j = i-1; j >= L_; j--){
				A[j] = max(A[j+1], H[j]);
			}
            for (int j = i+1; j <= R_; j++){
                A[j] = max(A[j-1], H[j]);
            }
            for (int j=L_; j<=R_; j++) ans+=A[j];
			actual_ans = min(ans, actual_ans);
		}
		C.push_back(actual_ans);
	}
	return C;
}

Compilation message

meetings.cpp: In constructor 'node::node(long long int, long long int, long long int*)':
meetings.cpp:23:10: warning: 'node::lset' will be initialized after [-Wreorder]
   23 |     bool lset;
      |          ^~~~
meetings.cpp:22:22: warning:   'long long int node::add_val' [-Wreorder]
   22 |     int mn, mx, sum, add_val, set_val;
      |                      ^~~~~~~
meetings.cpp:25:5: warning:   when initialized here [-Wreorder]
   25 |     node (int _s, int _e, int A[] = NULL): s(_s), e(_e), mn(0), mx(0), sum(0), lset(0), add_val(0), set_val(0), l(NULL), r(NULL) {
      |     ^~~~
meetings.cpp: In member function 'void node::lazy_propagate()':
meetings.cpp:55:28: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
   55 |             lset = set_val = 0;
      |                    ~~~~~~~~^~~
meetings.cpp: In function 'vi minimum_costs(std::vector<int>, std::vector<int>, std::vector<int>)':
meetings.cpp:104:17: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  104 |  for (int i=0; i<H.size(); i++) A[i]=H[i];
      |                ~^~~~~~~~~
meetings.cpp:112:28: error: no matching function for call to 'max(long long int&, __gnu_cxx::__alloc_traits<std::allocator<int>, int>::value_type&)'
  112 |     A[j] = max(A[j+1], H[j]);
      |                            ^
In file included from /usr/include/c++/10/vector:60,
                 from meetings.h:3,
                 from meetings.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:
meetings.cpp:112:28: note:   deduced conflicting types for parameter 'const _Tp' ('long long int' and '__gnu_cxx::__alloc_traits<std::allocator<int>, int>::value_type' {aka 'int'})
  112 |     A[j] = max(A[j+1], H[j]);
      |                            ^
In file included from /usr/include/c++/10/vector:60,
                 from meetings.h:3,
                 from meetings.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:
meetings.cpp:112:28: note:   deduced conflicting types for parameter 'const _Tp' ('long long int' and '__gnu_cxx::__alloc_traits<std::allocator<int>, int>::value_type' {aka 'int'})
  112 |     A[j] = max(A[j+1], H[j]);
      |                            ^
In file included from /usr/include/c++/10/algorithm:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:65,
                 from meetings.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:
meetings.cpp:112:28: note:   mismatched types 'std::initializer_list<_Tp>' and 'long long int'
  112 |     A[j] = max(A[j+1], H[j]);
      |                            ^
In file included from /usr/include/c++/10/algorithm:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:65,
                 from meetings.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:
meetings.cpp:112:28: note:   mismatched types 'std::initializer_list<_Tp>' and 'long long int'
  112 |     A[j] = max(A[j+1], H[j]);
      |                            ^
meetings.cpp:115:40: error: no matching function for call to 'max(long long int&, __gnu_cxx::__alloc_traits<std::allocator<int>, int>::value_type&)'
  115 |                 A[j] = max(A[j-1], H[j]);
      |                                        ^
In file included from /usr/include/c++/10/vector:60,
                 from meetings.h:3,
                 from meetings.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:
meetings.cpp:115:40: note:   deduced conflicting types for parameter 'const _Tp' ('long long int' and '__gnu_cxx::__alloc_traits<std::allocator<int>, int>::value_type' {aka 'int'})
  115 |                 A[j] = max(A[j-1], H[j]);
      |                                        ^
In file included from /usr/include/c++/10/vector:60,
                 from meetings.h:3,
                 from meetings.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:
meetings.cpp:115:40: note:   deduced conflicting types for parameter 'const _Tp' ('long long int' and '__gnu_cxx::__alloc_traits<std::allocator<int>, int>::value_type' {aka 'int'})
  115 |                 A[j] = max(A[j-1], H[j]);
      |                                        ^
In file included from /usr/include/c++/10/algorithm:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:65,
                 from meetings.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:
meetings.cpp:115:40: note:   mismatched types 'std::initializer_list<_Tp>' and 'long long int'
  115 |                 A[j] = max(A[j-1], H[j]);
      |                                        ^
In file included from /usr/include/c++/10/algorithm:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:65,
                 from meetings.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:
meetings.cpp:115:40: note:   mismatched types 'std::initializer_list<_Tp>' and 'long long int'
  115 |                 A[j] = max(A[j-1], H[j]);
      |                                        ^
meetings.cpp:102:20: warning: unused variable 'N' [-Wunused-variable]
  102 |  int Q = L.size(), N = H.size();
      |                    ^