Submission #1213702

#TimeUsernameProblemLanguageResultExecution timeMemory
1213702quan606303Regions (IOI09_regions)C++20
Compilation error
0 ms0 KiB
/*
 * @Author: quan606303 
 * @Date: 2025-06-06 13:36:55 
 * @Last Modified by: quan606303
 * @Last Modified time: 2025-06-06 14:54:43
 */
/*idea : 
    merge giua online va offline :
    + THT1 online : voi cac thg co size < sqrt(N) thi ta se dung binarysearch de tinh voi do phuc tap la sqrt(N)*log(N)
    + TH2 offline voi cac thg co size >= sqrt(N) thi ta se co toi da sqrt(N) thang giong vay nen ta se tinh het tat ca cap r1,r2 voi r1 la cac thang co size >= sqrt(N) voi do phuc tap toi da la N* sqrt(N).
    tong do phuc tap la N*sqrt(N)+q*sqrt(N)*log(N)
*/
#include <bits/stdc++.h>
#define int long long
#define ll long long
#define INTMAX INT_MAX
#define INTMIN INT_MIN
#define LONGMAX LLONG_MAX
#define LONGMIN LLONG_MIN
#define fi first
#define se second
#define memfull(a,b) memset(a,b,sizeof(a));
#define endl '\n'
#define file(a) freopen(a".inp","r",stdin); freopen(a".out","w",stdout);
using namespace std;
const int MOD=1e9+7;
const int maxn=2e5+7;
const int maxR=25000+7;
const int BLOCK=sqrt(maxn);
vector<int> adj[maxn];
vector<int> child[maxR];
int n,R,q,par[maxn];
map<int,int> mp[maxn];
int tin[maxn],tout[maxn],id=0;
void dfs(int u,int p)
{
    tin[u]=++id;
    for (auto v:adj[u])
    {
        if (v==p)continue;
        dfs(v,u);
    }
    tout[u]=id;
}
void dfs_cal(int u,int p,int col,int cnt)
{
    mp[col][par[u]]+=cnt;
    if (par[u]==col)cnt++;
    for (auto v:adj[u])
    {
        if (v==p)continue;
        dfs_cal(v,u,col,cnt);
    }
    if (par[u]==col)cnt--;
}
vector<int> child_tin[maxR];
int32_t main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
   // file("test");
    cin>>n>>R>>q;
    int tam;
    cin>>tam;
    par[1]=tam;
    child[tam].push_back(1);
    for (int i=2;i<=n;i++)
    {
        int s,h;
        cin>>s>>h;
        par[i]=h;
        child[h].push_back(i);
        adj[s].push_back(i);
    }
    dfs(1,0);
    // for (int i=1;i<=n;i++)cout<<i<<" "<<tin[i]<<endl;
    // cout<<endl;
    for (int i=1;i<=R;i++)if (child[i].size()>=BLOCK)dfs_cal(1,0,i,0);
    for (int i=1;i<=R;i++)
    {
        for (auto j:child[i])child_tin[i].push_back(tin[j]);
        sort(child_tin[i].begin(),child_tin[i].end());
    }
    // for (int i=1;i<=R;i++)
    // {
    //     cout<<i<<" : "<<endl;
    //     for (auto j:child_tin[i])cout<<j<<" ";
    //     cout<<endl;
    // }
    while (q--)
    {
        int r1,r2;
        cin>>r1>>r2;
        if (child[r1].size()>=BLOCK)cout<<mp[r1][r2]<<endl;
        else
        {
            int ans=0;
            for (auto i:child[r1])
            {
                ans+=max(0,(upper_bound(child_tin[r2].begin(),child_tin[r2].end(),tout[i])-1-child_tin[r2].begin())-(lower_bound(child_tin[r2].begin(),child_tin[r2].end(),tin[i])-child_tin[r2].begin())+1);
            }
            cout<<ans<<endl;
        }
        cout<<flush;
    }
    return 0;
}

Compilation message (stderr)

regions.cpp: In function 'int32_t main()':
regions.cpp:101:25: error: no matching function for call to 'max(int, __gnu_cxx::__normal_iterator<long long int*, std::vector<long long int> >::difference_type)'
  101 |                 ans+=max(0,(upper_bound(child_tin[r2].begin(),child_tin[r2].end(),tout[i])-1-child_tin[r2].begin())-(lower_bound(child_tin[r2].begin(),child_tin[r2].end(),tin[i])-child_tin[r2].begin())+1);
      |                      ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/bits/specfun.h:45,
                 from /usr/include/c++/11/cmath:1935,
                 from /usr/include/x86_64-linux-gnu/c++/11/bits/stdc++.h:41,
                 from regions.cpp:13:
/usr/include/c++/11/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++/11/bits/stl_algobase.h:254:5: note:   template argument deduction/substitution failed:
regions.cpp:101:25: note:   deduced conflicting types for parameter 'const _Tp' ('int' and '__gnu_cxx::__normal_iterator<long long int*, std::vector<long long int> >::difference_type' {aka 'long int'})
  101 |                 ans+=max(0,(upper_bound(child_tin[r2].begin(),child_tin[r2].end(),tout[i])-1-child_tin[r2].begin())-(lower_bound(child_tin[r2].begin(),child_tin[r2].end(),tin[i])-child_tin[r2].begin())+1);
      |                      ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/bits/specfun.h:45,
                 from /usr/include/c++/11/cmath:1935,
                 from /usr/include/x86_64-linux-gnu/c++/11/bits/stdc++.h:41,
                 from regions.cpp:13:
/usr/include/c++/11/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++/11/bits/stl_algobase.h:300:5: note:   template argument deduction/substitution failed:
regions.cpp:101:25: note:   deduced conflicting types for parameter 'const _Tp' ('int' and '__gnu_cxx::__normal_iterator<long long int*, std::vector<long long int> >::difference_type' {aka 'long int'})
  101 |                 ans+=max(0,(upper_bound(child_tin[r2].begin(),child_tin[r2].end(),tout[i])-1-child_tin[r2].begin())-(lower_bound(child_tin[r2].begin(),child_tin[r2].end(),tin[i])-child_tin[r2].begin())+1);
      |                      ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/string:52,
                 from /usr/include/c++/11/bits/locale_classes.h:40,
                 from /usr/include/c++/11/bits/ios_base.h:41,
                 from /usr/include/c++/11/ios:42,
                 from /usr/include/c++/11/istream:38,
                 from /usr/include/c++/11/sstream:38,
                 from /usr/include/c++/11/complex:45,
                 from /usr/include/c++/11/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/11/bits/stdc++.h:54,
                 from regions.cpp:13:
/usr/include/c++/11/bits/stl_algo.h:3461:5: note: candidate: 'template<class _Tp> constexpr _Tp std::max(std::initializer_list<_Tp>)'
 3461 |     max(initializer_list<_Tp> __l)
      |     ^~~
/usr/include/c++/11/bits/stl_algo.h:3461:5: note:   template argument deduction/substitution failed:
regions.cpp:101:25: note:   mismatched types 'std::initializer_list<_Tp>' and 'int'
  101 |                 ans+=max(0,(upper_bound(child_tin[r2].begin(),child_tin[r2].end(),tout[i])-1-child_tin[r2].begin())-(lower_bound(child_tin[r2].begin(),child_tin[r2].end(),tin[i])-child_tin[r2].begin())+1);
      |                      ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/string:52,
                 from /usr/include/c++/11/bits/locale_classes.h:40,
                 from /usr/include/c++/11/bits/ios_base.h:41,
                 from /usr/include/c++/11/ios:42,
                 from /usr/include/c++/11/istream:38,
                 from /usr/include/c++/11/sstream:38,
                 from /usr/include/c++/11/complex:45,
                 from /usr/include/c++/11/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/11/bits/stdc++.h:54,
                 from regions.cpp:13:
/usr/include/c++/11/bits/stl_algo.h:3467:5: note: candidate: 'template<class _Tp, class _Compare> constexpr _Tp std::max(std::initializer_list<_Tp>, _Compare)'
 3467 |     max(initializer_list<_Tp> __l, _Compare __comp)
      |     ^~~
/usr/include/c++/11/bits/stl_algo.h:3467:5: note:   template argument deduction/substitution failed:
regions.cpp:101:25: note:   mismatched types 'std::initializer_list<_Tp>' and 'int'
  101 |                 ans+=max(0,(upper_bound(child_tin[r2].begin(),child_tin[r2].end(),tout[i])-1-child_tin[r2].begin())-(lower_bound(child_tin[r2].begin(),child_tin[r2].end(),tin[i])-child_tin[r2].begin())+1);
      |                      ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~