Submission #1300770

#TimeUsernameProblemLanguageResultExecution timeMemory
1300770tolgaRegions (IOI09_regions)C++20
Compilation error
0 ms0 KiB
#include <iostream>
#include <vector>
#include <algorithm>
typedef long long ll;

const int maxn = 5 + 2e5, maxr = 25005;
std::vector<int> edges[maxn], reg[maxr];
int vert[maxn], tin[maxn], tout[maxn], timer = 0;

void dfs(int u) {
  tin[u] = ++timer;
  for (int v : edges[u])
    dfs(v);
  tout[u] = timer;
}

int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr), std::cout.tie(nullptr);

  int n, r, q;
  std::cin >> n >> r >> q;

  std::cin >> vert[1];
  reg[vert[1]].push_back(1);
  for (int i = 2; i <= n; i++) {
    int par;
    std::cin >> par;
    edges[par].push_back(i);

    std::cin >> vert[i];
    reg[vert[i]].push_back(i);
  }

  dfs(1);

  auto cmp = [](int &a, int &b) { return tin[a] < tin[b]; };
  for (int i = 1; i <= r; i++)
    std::sort(reg[i].begin(), reg[i].end(), cmp);

  auto cmp1 = [](int &node, int &val) { return tin[node] < val; };
  auto cmp2 = [](int &val, int &node) { return val < tin[node]; };

  while (q--) {
    int r1, r2;
    std::cin >> r1 >> r2;

    auto &v1 = reg[r1], &v2 = reg[r2];
    ll ans = 0;
    for (auto &u : v1) {
      int left =
          std::lower_bound(v2.begin(), v2.end(), tin[u], cmp1) - v2.begin();
      int right =
          std::upper_bound(v2.begin(), v2.end(), tout[u], cmp2) - v2.begin();
      ans += right - left;
    }
    std::cout << ans << std::endl;
  }
}

Compilation message (stderr)

In file included from /usr/include/c++/13/bits/stl_algobase.h:71,
                 from /usr/include/c++/13/string:51,
                 from /usr/include/c++/13/bits/locale_classes.h:40,
                 from /usr/include/c++/13/bits/ios_base.h:41,
                 from /usr/include/c++/13/ios:44,
                 from /usr/include/c++/13/ostream:40,
                 from /usr/include/c++/13/iostream:41,
                 from regions.cpp:1:
/usr/include/c++/13/bits/predefined_ops.h: In instantiation of 'constexpr bool __gnu_cxx::__ops::_Iter_comp_val<_Compare>::operator()(_Iterator, _Value&) [with _Iterator = __gnu_cxx::__normal_iterator<int*, std::vector<int> >; _Value = const int; _Compare = main()::<lambda(int&, int&)>]':
/usr/include/c++/13/bits/stl_algobase.h:1472:14:   required from 'constexpr _ForwardIterator std::__lower_bound(_ForwardIterator, _ForwardIterator, const _Tp&, _Compare) [with _ForwardIterator = __gnu_cxx::__normal_iterator<int*, vector<int> >; _Tp = int; _Compare = __gnu_cxx::__ops::_Iter_comp_val<main()::<lambda(int&, int&)> >]'
/usr/include/c++/13/bits/stl_algo.h:2015:32:   required from 'constexpr _FIter std::lower_bound(_FIter, _FIter, const _Tp&, _Compare) [with _FIter = __gnu_cxx::__normal_iterator<int*, vector<int> >; _Tp = int; _Compare = main()::<lambda(int&, int&)>]'
regions.cpp:52:27:   required from here
/usr/include/c++/13/bits/predefined_ops.h:196:30: error: no match for call to '(main()::<lambda(int&, int&)>) (int&, const int&)'
  196 |         { return bool(_M_comp(*__it, __val)); }
      |                       ~~~~~~~^~~~~~~~~~~~~~
/usr/include/c++/13/bits/predefined_ops.h:196:30: note: candidate: 'bool (*)(int&, int&)' (conversion)
/usr/include/c++/13/bits/predefined_ops.h:196:30: note:   conversion of argument 3 would be ill-formed:
/usr/include/c++/13/bits/predefined_ops.h:196:30: error: binding reference of type 'int&' to 'const int' discards qualifiers
regions.cpp:41:15: note: candidate: 'main()::<lambda(int&, int&)>' (near match)
   41 |   auto cmp1 = [](int &node, int &val) { return tin[node] < val; };
      |               ^
regions.cpp:41:15: note:   conversion of argument 2 would be ill-formed:
/usr/include/c++/13/bits/predefined_ops.h:196:30: error: binding reference of type 'int&' to 'const int' discards qualifiers
  196 |         { return bool(_M_comp(*__it, __val)); }
      |                       ~~~~~~~^~~~~~~~~~~~~~
/usr/include/c++/13/bits/predefined_ops.h: In instantiation of 'constexpr bool __gnu_cxx::__ops::_Val_comp_iter<_Compare>::operator()(_Value&, _Iterator) [with _Value = const int; _Iterator = __gnu_cxx::__normal_iterator<int*, std::vector<int> >; _Compare = main()::<lambda(int&, int&)>]':
/usr/include/c++/13/bits/stl_algo.h:2035:14:   required from 'constexpr _ForwardIterator std::__upper_bound(_ForwardIterator, _ForwardIterator, const _Tp&, _Compare) [with _ForwardIterator = __gnu_cxx::__normal_iterator<int*, vector<int> >; _Tp = int; _Compare = __gnu_cxx::__ops::_Val_comp_iter<main()::<lambda(int&, int&)> >]'
/usr/include/c++/13/bits/stl_algo.h:2102:32:   required from 'constexpr _FIter std::upper_bound(_FIter, _FIter, const _Tp&, _Compare) [with _FIter = __gnu_cxx::__normal_iterator<int*, vector<int> >; _Tp = int; _Compare = main()::<lambda(int&, int&)>]'
regions.cpp:54:27:   required from here
/usr/include/c++/13/bits/predefined_ops.h:240:30: error: no match for call to '(main()::<lambda(int&, int&)>) (const int&, int&)'
  240 |         { return bool(_M_comp(__val, *__it)); }
      |                       ~~~~~~~^~~~~~~~~~~~~~
/usr/include/c++/13/bits/predefined_ops.h:240:30: note: candidate: 'bool (*)(int&, int&)' (conversion)
/usr/include/c++/13/bits/predefined_ops.h:240:30: note:   conversion of argument 2 would be ill-formed:
/usr/include/c++/13/bits/predefined_ops.h:240:30: error: binding reference of type 'int&' to 'const int' discards qualifiers
regions.cpp:42:15: note: candidate: 'main()::<lambda(int&, int&)>' (near match)
   42 |   auto cmp2 = [](int &val, int &node) { return val < tin[node]; };
      |               ^
regions.cpp:42:15: note:   conversion of argument 1 would be ill-formed:
/usr/include/c++/13/bits/predefined_ops.h:240:30: error: binding reference of type 'int&' to 'const int' discards qualifiers
  240 |         { return bool(_M_comp(__val, *__it)); }
      |                       ~~~~~~~^~~~~~~~~~~~~~