제출 #593188

#제출 시각아이디문제언어결과실행 시간메모리
593188SeDunionDiversity (CEOI21_diversity)C++17
컴파일 에러
0 ms0 KiB
#include <iostream> #include <cassert> #include <iomanip> #include <algorithm> #include <string> #include <bitset> #include <vector> #include <cmath> #include <deque> #include <queue> #include <stack> #include <map> #include <set> #ifndef LOCAL #include <bits/stdc++.h> #define cerr if(false)cerr #endif using namespace std; using ll = long long; const int N = 3e5 + 66; ll a[N], n; ll pref[N]; /* summa(a[i]*(a[i]+1)/2 + a[i]*pref[i-1]*(i+1) - a[i]*(pref[n-1]-pref[i])*i) summa((a[i]^2+a[i])/2 + a[i]*pref[i-1]*i+a[i]*pref[i-1] - a[i]*(pref[n-1]-pref[i])*i) summa((a[i]^2+a[i])/2 + a[i]*pref[i]*i-a[i]^2*i + a[i]*pref[i-1] - a[i]*(pref[n-1]-pref[i])*i) summa((a[i]^2+a[i])/2 + a[i]*pref[i]*i-a[i]^2*i + a[i]*pref[i]-a[i]^2 - a[i]*(pref[n-1]-pref[i])*i) summa((a[i]^2+a[i])/2 + a[i]*pref[i]*i-a[i]^2*i + a[i]*pref[i]-a[i]^2 - a[i]*pref[n-1]*i - a[i]*pref[i]*i) summa((a[i]^2+a[i])/2 + a[i]*pref[i]*i - a[i]^2*i + a[i]*pref[i]-a[i]^2 - a[i]*pref[n-1]*i - a[i]*pref[i]*i) summa(a[i]/2 + a[i]*pref[i]*(i+1) - a[i]^2*i - a[i]^2/2 - a[i]*pref[n-1]*i - a[i]*pref[i]*i) summa(a[i]/2 + a[i]*pref[i] - a[i]^2*i - a[i]^2/2 - a[i]*pref[n-1]*i) summa(a[i]/2 + a[i]*pref[i] - a[i]^2*i - a[i]^2/2 - a[i]*pref[n-1]*i) */ ll f(ll s) { return s * (s + 1) / 2; } //summa(f(pref[i - 1]) + f(pref[n - 1] - pref[i])) ll solve() { ll ans = 0; for (int i = 0 ; i < n ; ++ i) { pref[i] = a[i]; if (i) pref[i] += pref[i - 1]; } for (int i = 0 ; i < n ; ++ i) { if (i) ans += f(pref[i - 1]); ans += f(pref[n - 1] - pref[i]); } ll C = n * f(pref[n-1]); // C = len * f(sum) return C-ans; } vector<int>vec; int used[N]; int comp[N], freq[N]; void del(int v) { v = a[v]; cerr << "del " << v << endl; comp[freq[v]]--; freq[v]--; if (freq[v] > 0 && !comp[freq[v]] && !used[freq[v]]) { used[freq[v]] = 1; vec.emplace_back(freq[v]); } comp[freq[v]]++; } void add(int v) { v = a[v]; cerr << "add " << v << endl; comp[freq[v]]--; freq[v]++; if (freq[v] > 0 && !comp[freq[v]] && !used[freq[v]]) { used[freq[v]] = 1; vec.emplace_back(freq[v]); } comp[freq[v]]++; } using pll = pair<ll,ll>; deque<pll>d; int L, R; ll get() { for (int i = 0 ; i < (int)vec.size() ; ++ i) { if (!comp[vec[i]]) { used[vec[i]] = 0; swap(vec[i], vec.back()); vec.pop_back(); --i; } } sort(vec.rbegin(), vec.rend()); ll q = 0; d.clear(); int par = 0; for (int i : vec) { for (int _ = 0 ; _ < comp[i] ; ++ _) { if ((int)d.size() & 1) d.push_back(i); else d.push_front(i); } int lc, rc; if (par) lc = comp[i] / 2, rc = comp[i] - comp[i] / 2; else rc = comp[i] / 2, lc = comp[i] - comp[i] / 2; if (lc) d.push_front({i, lc}); if (rc) d.push_back({i, rc}); par ^= (comp[i] & 1); } int m = d.size(); ll pref = 0; cerr << "m "; for (int i = 0 ; i < m ; ++ i) cerr << "{" << d[i].first << ", " << d[i].second << "} "; cerr << endl; for (int i = 0 ; i < m ; ++ i) { q -= f(pref) + f(R-L+1 - pref - d[i]); pref += d[i]; } q += m * f(R-L+1); cerr << "get " << q << endl; return q; } ll ans[N]; int ql[N], qr[N]; vector<tuple<int,int,int>>MO; const int K = 400; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int q; cin >> n >> q; for (int i = 0 ; i < n ; ++ i) cin >> a[i]; for (int i = 0 ; i < q ; ++ i) { cin >> ql[i] >> qr[i]; ql[i]--, qr[i]--; MO.emplace_back(ql[i]/K, qr[i], i); } sort(MO.begin(), MO.end()); L = 1, R = 0; for (int $ = 0 ; $ < q ; ++ $) { int i = get<2>(MO[$]); int l = ql[i], r = qr[i]; while (L > l) add(--L); while (R < r) add(++R); while (L < l) del(L++); while (R > r) del(R--); ans[i] = get(); } for (int i = 0 ; i < q ; ++ i) { cout << ans[i] << "\n"; } return 0; map<int,int>mp; for (int i = 0 ; i < n ; ++ i) mp[a[i]]++; vector<int>freq; for (auto [f, s] : mp) freq.emplace_back(s); sort(freq.rbegin(), freq.rend()); deque<int>p; for (int i : freq) { if ((int)p.size() & 1) p.push_back(i); else p.push_front(i); } n = p.size(); for (int i = 0 ; i < n ; ++ i) a[i] = p[i]; cout << solve(); }

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

diversity.cpp: In function 'll get()':
diversity.cpp:103:40: error: no matching function for call to 'std::deque<std::pair<long long int, long long int> >::push_back(int&)'
  103 |    if ((int)d.size() & 1) d.push_back(i);
      |                                        ^
In file included from /usr/include/c++/10/deque:67,
                 from diversity.cpp:9:
/usr/include/c++/10/bits/stl_deque.h:1493:7: note: candidate: 'void std::deque<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = std::pair<long long int, long long int>; _Alloc = std::allocator<std::pair<long long int, long long int> >; std::deque<_Tp, _Alloc>::value_type = std::pair<long long int, long long int>]'
 1493 |       push_back(const value_type& __x)
      |       ^~~~~~~~~
/usr/include/c++/10/bits/stl_deque.h:1493:35: note:   no known conversion for argument 1 from 'int' to 'const value_type&' {aka 'const std::pair<long long int, long long int>&'}
 1493 |       push_back(const value_type& __x)
      |                 ~~~~~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/stl_deque.h:1508:7: note: candidate: 'void std::deque<_Tp, _Alloc>::push_back(std::deque<_Tp, _Alloc>::value_type&&) [with _Tp = std::pair<long long int, long long int>; _Alloc = std::allocator<std::pair<long long int, long long int> >; std::deque<_Tp, _Alloc>::value_type = std::pair<long long int, long long int>]'
 1508 |       push_back(value_type&& __x)
      |       ^~~~~~~~~
/usr/include/c++/10/bits/stl_deque.h:1508:30: note:   no known conversion for argument 1 from 'int' to 'std::deque<std::pair<long long int, long long int> >::value_type&&' {aka 'std::pair<long long int, long long int>&&'}
 1508 |       push_back(value_type&& __x)
      |                 ~~~~~~~~~~~~~^~~
diversity.cpp:104:23: error: no matching function for call to 'std::deque<std::pair<long long int, long long int> >::push_front(int&)'
  104 |    else d.push_front(i);
      |                       ^
In file included from /usr/include/c++/10/deque:67,
                 from diversity.cpp:9:
/usr/include/c++/10/bits/stl_deque.h:1456:7: note: candidate: 'void std::deque<_Tp, _Alloc>::push_front(const value_type&) [with _Tp = std::pair<long long int, long long int>; _Alloc = std::allocator<std::pair<long long int, long long int> >; std::deque<_Tp, _Alloc>::value_type = std::pair<long long int, long long int>]'
 1456 |       push_front(const value_type& __x)
      |       ^~~~~~~~~~
/usr/include/c++/10/bits/stl_deque.h:1456:36: note:   no known conversion for argument 1 from 'int' to 'const value_type&' {aka 'const std::pair<long long int, long long int>&'}
 1456 |       push_front(const value_type& __x)
      |                  ~~~~~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/stl_deque.h:1471:7: note: candidate: 'void std::deque<_Tp, _Alloc>::push_front(std::deque<_Tp, _Alloc>::value_type&&) [with _Tp = std::pair<long long int, long long int>; _Alloc = std::allocator<std::pair<long long int, long long int> >; std::deque<_Tp, _Alloc>::value_type = std::pair<long long int, long long int>]'
 1471 |       push_front(value_type&& __x)
      |       ^~~~~~~~~~
/usr/include/c++/10/bits/stl_deque.h:1471:31: note:   no known conversion for argument 1 from 'int' to 'std::deque<std::pair<long long int, long long int> >::value_type&&' {aka 'std::pair<long long int, long long int>&&'}
 1471 |       push_front(value_type&& __x)
      |                  ~~~~~~~~~~~~~^~~
diversity.cpp:118:33: error: no match for 'operator-' (operand types are 'll' {aka 'long long int'} and '__gnu_cxx::__alloc_traits<std::allocator<std::pair<long long int, long long int> >, std::pair<long long int, long long int> >::value_type' {aka 'std::pair<long long int, long long int>'})
  118 |   q -= f(pref) + f(R-L+1 - pref - d[i]);
In file included from /usr/include/c++/10/bits/stl_algobase.h:67,
                 from /usr/include/c++/10/bits/char_traits.h:39,
                 from /usr/include/c++/10/ios:40,
                 from /usr/include/c++/10/ostream:38,
                 from /usr/include/c++/10/iostream:39,
                 from diversity.cpp:1:
/usr/include/c++/10/bits/stl_iterator.h:500:5: note: candidate: 'template<class _IteratorL, class _IteratorR> constexpr decltype ((__y.base() - __x.base())) std::operator-(const std::reverse_iterator<_Iterator>&, const std::reverse_iterator<_IteratorR>&)'
  500 |     operator-(const reverse_iterator<_IteratorL>& __x,
      |     ^~~~~~~~
/usr/include/c++/10/bits/stl_iterator.h:500:5: note:   template argument deduction/substitution failed:
diversity.cpp:118:38: note:   mismatched types 'const std::reverse_iterator<_Iterator>' and 'll' {aka 'long long int'}
  118 |   q -= f(pref) + f(R-L+1 - pref - d[i]);
      |                                      ^
In file included from /usr/include/c++/10/bits/stl_algobase.h:67,
                 from /usr/include/c++/10/bits/char_traits.h:39,
                 from /usr/include/c++/10/ios:40,
                 from /usr/include/c++/10/ostream:38,
                 from /usr/include/c++/10/iostream:39,
                 from diversity.cpp:1:
/usr/include/c++/10/bits/stl_iterator.h:1533:5: note: candidate: 'template<class _IteratorL, class _IteratorR> constexpr decltype ((__x.base() - __y.base())) std::operator-(const std::move_iterator<_IteratorL>&, const std::move_iterator<_IteratorR>&)'
 1533 |     operator-(const move_iterator<_IteratorL>& __x,
      |     ^~~~~~~~
/usr/include/c++/10/bits/stl_iterator.h:1533:5: note:   template argument deduction/substitution failed:
diversity.cpp:118:38: note:   mismatched types 'const std::move_iterator<_IteratorL>' and 'll' {aka 'long long int'}
  118 |   q -= f(pref) + f(R-L+1 - pref - d[i]);
      |                                      ^
In file included from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from diversity.cpp:15:
/usr/include/c++/10/complex:361:5: note: candidate: 'template<class _Tp> std::complex<_Tp> std::operator-(const std::complex<_Tp>&, const std::complex<_Tp>&)'
  361 |     operator-(const complex<_Tp>& __x, const complex<_Tp>& __y)
      |     ^~~~~~~~
/usr/include/c++/10/complex:361:5: note:   template argument deduction/substitution failed:
diversity.cpp:118:38: note:   mismatched types 'const std::complex<_Tp>' and 'll' {aka 'long long int'}
  118 |   q -= f(pref) + f(R-L+1 - pref - d[i]);
      |                                      ^
In file included from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from diversity.cpp:15:
/usr/include/c++/10/complex:370:5: note: candidate: 'template<class _Tp> std::complex<_Tp> std::operator-(const std::complex<_Tp>&, const _Tp&)'
  370 |     operator-(const complex<_Tp>& __x, const _Tp& __y)
      |     ^~~~~~~~
/usr/include/c++/10/complex:370:5: note:   template argument deduction/substitution failed:
diversity.cpp:118:38: note:   mismatched types 'const std::complex<_Tp>' and 'll' {aka 'long long int'}
  118 |   q -= f(pref) + f(R-L+1 - pref - d[i]);
      |                                      ^
In file included from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from diversity.cpp:15:
/usr/include/c++/10/complex:379:5: note: candidate: 'template<class _Tp> std::complex<_Tp> std::operator-(const _Tp&, const std::complex<_Tp>&)'
  379 |     operator-(const _Tp& __x, const complex<_Tp>& __y)
      |     ^~~~~~~~
/usr/include/c++/10/complex:379:5: note:   template argument deduction/substitution failed:
diversity.cpp:118:38: note:   '__gnu_cxx::__alloc_traits<std::allocator<std::pair<long long int, long long int> >, std::pair<long long int, long long int> >::value_type' {aka 'std::pair<long long int, long long int>'} is not derived from 'const std::complex<_Tp>'
  118 |   q -= f(pref) + f(R-L+1 - pref - d[i]);
      |                                      ^
In file included from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from diversity.cpp:15:
/usr/include/c++/10/complex:456:5: note: candidate: 'template<class _Tp> std::complex<_Tp> std::operator-(const std::complex<_Tp>&)'
  456 |     operator-(const complex<_Tp>& __x)
      |     ^~~~~~~~
/usr/include/c++/10/complex:456:5: note:   template argument deduction/substitution failed:
diversity.cpp:118:38: note:   mismatched types 'const std::complex<_Tp>' and 'll' {aka 'long long int'}
  118 |   q -= f(pref) + f(R-L+1 - pref - d[i]);
      |                                      ^
In file included from /usr/include/c++/10/valarray:603,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:95,
                 from diversity.cpp:15:
/usr/include/c++/10/bits/valarray_after.h:406:5: note: candidate: 'template<class _Dom1, class _Dom2> std::_Expr<std::__detail::_BinClos<std::__minus, std::_Expr, std::_Expr, _Dom1, _Dom2>, typename std::__fun<std::__minus, typename _Dom1::value_type>::result_type> std::operator-(const std::_Expr<_Dom1, typename _Dom1::value_type>&, const std::_Expr<_Dom2, typename _Dom2::value_type>&)'
  406 |     _DEFINE_EXPR_BINARY_OPERATOR(-, __minus)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/10/bits/valarray_after.h:406:5: note:   template argument deduction/substitution failed:
diversity.cpp:118:38: note:   mismatched types 'const std::_Expr<_Dom1, typename _Dom1::value_type>' and 'll' {aka 'long long int'}
  118 |   q -= f(pref) + f(R-L+1 - pref - d[i]);
      |                                      ^
In file included from /usr/include/c++/10/valarray:603,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:95,
                 from diversity.cpp:15:
/usr/include/c++/10/bits/valarray_after.h:406:5: note: candidate: 'template<class _Dom> std::_Expr<std::__detail::_BinClos<std::__minus, std::_Expr, std::_Constant, _Dom, typename _Dom::value_type>, typename std::__fun<std::__minus, typename _Dom1::value_type>::result_type> std::operator-(const std::_Expr<_Dom1, typename _Dom1::value_type>&, const typename _Dom::value_type&)'
  406 |     _DEFINE_EXPR_BINARY_OPERATOR(-, __minus)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/10/bits/valarray_after.h:406:5: note:   template argument deduction/substitution failed:
diversity.cpp:118:38: note:   mismatched types 'const std::_Expr<_Dom1, typename _Dom1::value_type>' and 'll' {aka 'long long int'}
  118 |   q -= f(pref) + f(R-L+1 - pref - d[i]);
      |                                      ^
In file included from /usr/include/c++/10/valarray:603,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:95,
                 from diversity.cpp:15:
/usr/include/c++/10/bits/valarray_after.h:406:5: note: candidate: 'template<class _Dom> std::_Expr<std::__detail::_BinClos<std::__minus, std::_Constant, std::_Expr, typename _Dom::value_type, _Dom>, typename std::__fun<std::__minus, typename _Dom1::value_type>::result_type> std::operator-(const typename _Dom::value_type&, const std::_Expr<_Dom1, typename _Dom1::value_type>&)'
  406 |     _DEFINE_EXPR_BINARY_OPERATOR(-, __minus)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/10/bits/valarray_after.h:406:5: note:   template argument deduction/substitution failed:
diversity.cpp:118:38: note:   '__gnu_cxx::__alloc_traits<std::allocator<std::pair<long long int, long long int> >, std::pair<long long int, long long int> >::value_type' {aka 'std::pair<long long int, long long int>'} is not derived from 'const std::_Expr<_Dom1, typename _Dom1::value_type>'
  118 |   q -= f(pref) + f(R-L+1 - pref - d[i]);
      |                                      ^
In file included from /usr/include/c++/10/valarray:603,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:95,
                 from diversity.cpp:15:
/usr/include/c++/10/bits/valarray_after.h:406:5: note: candidate: 'template<class _Dom> std::_Expr<std::__detail::_BinClos<std::__minus, std::_Expr, std::_ValArray, _Dom, typename _Dom::value_type>, typename std::__fun<std::__minus, typename _Dom1::value_type>::result_type> std::operator-(const std::_Expr<_Dom1, typename _Dom1::value_type>&, const std::valarray<typename _Dom::value_type>&)'
  406 |     _DEFINE_EXPR_BINARY_OPERATOR(-, __minus)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/10/bits/valarray_after.h:406:5: note:   template argument deduction/substitution failed:
diversity.cpp:118:38: note:   mismatched types 'const std::_Expr<_Dom1, typename _Dom1::value_type>' and 'll' {aka 'long long int'}
  118 |   q -= f(pref) + f(R-L+1 - pref - d[i]);
      |                                      ^
In file included from /usr/include/c++/10/valarray:603,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:95,
                 from diversity.cpp:15:
/usr/include/c++/10/bits/valarray_after.h:406:5: note: candidate: 'template<class _Dom> std::_Expr<std::__detail::_BinClos<std::__minus, std::_ValArray, std::_Expr, typename _Dom::value_type, _Dom>, typename std::__fun<std::__minus, typename _Dom1::value_type>::result_type> std::operator-(const std::valarray<typename _Dom::value_type>&, const std::_Expr<_Dom1, typename _Dom1::value_type>&)'
  406 |     _DEFINE_EXPR_BINARY_OPERATOR(-, __minus)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/10/bits/valarray_after.h:406:5: note:   template argument deduction/substitution failed:
diversity.cpp:118:38: note:   '__gnu_cxx::__alloc_traits<std::allocator<std::pair<long long int, long long int> >, std::pair<long long int, long long int> >::value_type' {aka 'std::pair<long long int, long long int>'} is not derived from 'const std::_Expr<_Dom1, typename _Dom1::value_type>'
  118 |   q -= f(pref) + f(R-L+1 - pref - d[i]);
      |                                      ^
In file included from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:95,
                 from diversity.cpp:15:
/usr/include/c++/10/valarray:1186:1: note: candidate: 'template<class _Tp> std::_Expr<std::__detail::_BinClos<std::__minus, std::_ValArray, std::_ValArray, _Tp, _Tp>, typename std::__fun<std::__minus, _Tp>::result_type> std::operator-(const std::valarray<_Tp>&, const std::valarray<_Tp>&)'
 1186 | _DEFINE_BINARY_OPERATOR(-, __minus)
      | ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/10/valarray:1186:1: note:   template argument deduction/substitution failed:
diversity.cpp:118:38: note:   mismatched types 'const std::valarray<_Tp>' and 'll' {aka 'long long int'}
  118 |   q -= f(pref) + f(R-L+1 - pref - d[i]);
      |                                      ^
In file included from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:95,
                 from diversity.cpp:15:
/usr/include/c++/10/valarray:1186:1: note: candidate: 'template<class _Tp> std::_Expr<std::__detail::_BinClos<std::__minus, std::_ValArray, std::_Constant, _Tp, _Tp>, typename std::__fun<std::__minus, _Tp>::result_type> std::operator-(const std::valarray<_Tp>&, const typename std::valarray<_Tp>::value_type&)'
 1186 | _DEFINE_BINARY_OPERATOR(-, __minus)
      | ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/10/valarray:1186:1: note:   template argument deduction/substitution failed:
diversity.cpp:118:38: note:   mismatched types 'const std::valarray<_Tp>' and 'll' {aka 'long long int'}
  118 |   q -= f(pref) + f(R-L+1 - pref - d[i]);
      |                                      ^
In file included from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:95,
                 from diversity.cpp:15:
/usr/include/c++/10/valarray:1186:1: note: candidate: 'template<class _Tp> std::_Expr<std::__detail::_BinClos<std::__minus, std::_Constant, std::_ValArray, _Tp, _Tp>, typename std::__fun<std::__minus, _Tp>::result_type> std::operator-(const typename std::valarray<_Tp>::value_type&, const std::valarray<_Tp>&)'
 1186 | _DEFINE_BINARY_OPERATOR(-, __minus)
      | ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/10/valarray:1186:1: note:   template argument deduction/substitution failed:
diversity.cpp:118:38: note:   '__gnu_cxx::__alloc_traits<std::allocator<std::pair<long long int, long long int> >, std::pair<long long int, long long int> >::value_type' {aka 'std::pair<long long int, long long int>'} is not derived from 'const std::valarray<_Tp>'
  118 |   q -= f(pref) + f(R-L+1 - pref - d[i]);
      |                                      ^
diversity.cpp:119:8: error: no match for 'operator+=' (operand types are 'll' {aka 'long long int'} and '__gnu_cxx::__alloc_traits<std::allocator<std::pair<long long int, long long int> >, std::pair<long long int, long long int> >::value_type' {aka 'std::pair<long long int, long long int>'})
  119 |   pref += d[i];