Submission #1161682

#TimeUsernameProblemLanguageResultExecution timeMemory
1161682HanksburgerEvent Hopping (BOI22_events)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
using namespace std;
int largestRangeInd[100005], reachable[100005][20], seg[400005][20], n, q, cnt;
vector<pair<int, int> > endpointsSet[100005];
vector<pair<pair<int, int>, int> > ranges;
pair<int, int> position[100005];
map<int, int> endpointsMap;
set<int> endpoints;
void build(int ind, int i, int l, int r)
{
    if (l==r)
    {
        seg[i][ind]=reachable[l][ind];
        return;
    }
    int mid=(l+r)/2;
    build(ind, i*2, l, mid);
    build(ind, i*2+1, mid+1, r);
    seg[i][ind]=max(seg[i*2][ind], seg[i*2+1][ind]);
}
int query(int ind, int i, int l, int r, int ql, int qr)
{
    if (ql<=l && r<=qr)
        return seg[i][ind];
    int mid=(l+r)/2, result=0;
    if (ql<=mid && l<=qr)
        result=max(result, query(ind, i*2, l, mid, ql, qr));
    if (ql<=r && mid<qr)
        result=max(result, query(ind, i*2+1, mid+1, r, ql, qr));
    return result;
}
int findDistance(int L, int R, int target)
{
    //cout << "findDistance " << L << ' ' << R << ' ' << target << '\n';
    if (L>R || query(18, 1, 1, cnt, L, R)<target)
        return 1e9;
    int ans=0;
    for (int i=18; i>=0; i--)
    {
        int res=query(i, 1, 1, cnt, L, R);
        if (res<target)
        {
            ans+=(1<<i);
            R=res;
        }
    }
    return ans+1;
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin >> n >> q;
    for (int i=1; i<=n; i++)
    {
        int l, r;
        cin >> l >> r;
        ranges.push_back({{l, r}, i});
        endpoints.insert(r);
        endpointsMap[r]=0;
    }
    for (int i=0; i<n; i++)
    {
        int l=ranges[i].first.first;
        ranges[i].first.first=*endpoints.lower_bound(l);
    }
    cnt=endpointsMap.size();
    for (auto it=endpointsMap.begin(); it!=endpointsMap.end(); it++)
    {
        (it->second)=cnt;
        cnt--;
    }
    for (int i=0; i<n; i++)
    {
        ranges[i].first={endpointsMap[ranges[i].first.first], endpointsMap[ranges[i].first.second]};
        endpointsSet[ranges[i].first.second].push_back({ranges[i].first.first, ranges[i].second});
    }
    cnt=endpointsMap.size();
    for (int i=1; i<=cnt; i++)
    {
        for (int j=1; j<endpointsSet[i].size(); j++)
            if (endpointsSet[i][largestRangeInd[i]].first<endpointsSet[i][j].first)
                largestRangeInd[i]=j;
        reachable[i][0]=endpointsSet[i][largestRangeInd[i]].first;
    }
    for (int i=1; i<20; i++)
    {
        build(i-1, 1, 1, cnt);
        for (int j=1; j<=cnt; j++)
            reachable[j][i]=query(i-1, 1, 1, cnt, j, reachable[j][i-1]);
    }
    for (int i=1; i<=cnt; i++)
        for (int j=0; j<endpointsSet[i].size(); j++)
            position[endpointsSet[i][j].second]={i, endpointsSet[i][j].first};
    /*cout << "ranges:\n";
    for (int i=0; i<n; i++)
        cout << ranges[i].first.first << ' ' << ranges[i].first.second << '\n';
    cout << "endpointsSets:\n";
    for (int i=1; i<=cnt; i++)
    {
        cout << "Set " << i << ": ";
        for (auto x:endpointsSet[i])
            cout << x.first << ' ';
        cout << '\n';
    }
    cout << "positions:\n";
    for (int i=1; i<=n; i++)
        cout << position[i].first << ' ' << position[i].second << '\n';*/
    for (int i=1; i<=q; i++)
    {
        int startIndex, endIndex;
        cin >> endIndex >> startIndex;
        if (position[startIndex].first>position[endIndex].first)
        {
            cout << "impossible\n";
            continue;
        }
        if (position[startIndex].first==position[endIndex].first)
        {
            if (startIndex==endIndex)
                cout << 0 << '\n';
            else
                cout << 1 << '\n';
            continue;
        }
        int L=position[startIndex].first, R=position[startIndex].second, target=position[endIndex].first;
        int ans=min(findDistance(L+1, R, target), findDistance(L, L, target))+1;
        if (ans>1e9)
            cout << "impossible\n";
        else
            cout << ans << '\n';
    }
}

Compilation message (stderr)

events.cpp: In function 'int main()':
events.cpp:59:9: error: reference to 'ranges' is ambiguous
   59 |         ranges.push_back({{l, r}, i});
      |         ^~~~~~
In file included from /usr/include/c++/11/compare:39,
                 from /usr/include/c++/11/bits/stl_pair.h:65,
                 from /usr/include/c++/11/bits/stl_algobase.h:64,
                 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 events.cpp:1:
/usr/include/c++/11/concepts:163:13: note: candidates are: 'namespace std::ranges { }'
  163 |   namespace ranges
      |             ^~~~~~
events.cpp:5:36: note:                 'std::vector<std::pair<std::pair<int, int>, int> > ranges'
    5 | vector<pair<pair<int, int>, int> > ranges;
      |                                    ^~~~~~
events.cpp:65:15: error: reference to 'ranges' is ambiguous
   65 |         int l=ranges[i].first.first;
      |               ^~~~~~
In file included from /usr/include/c++/11/compare:39,
                 from /usr/include/c++/11/bits/stl_pair.h:65,
                 from /usr/include/c++/11/bits/stl_algobase.h:64,
                 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 events.cpp:1:
/usr/include/c++/11/concepts:163:13: note: candidates are: 'namespace std::ranges { }'
  163 |   namespace ranges
      |             ^~~~~~
events.cpp:5:36: note:                 'std::vector<std::pair<std::pair<int, int>, int> > ranges'
    5 | vector<pair<pair<int, int>, int> > ranges;
      |                                    ^~~~~~
events.cpp:66:9: error: reference to 'ranges' is ambiguous
   66 |         ranges[i].first.first=*endpoints.lower_bound(l);
      |         ^~~~~~
In file included from /usr/include/c++/11/compare:39,
                 from /usr/include/c++/11/bits/stl_pair.h:65,
                 from /usr/include/c++/11/bits/stl_algobase.h:64,
                 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 events.cpp:1:
/usr/include/c++/11/concepts:163:13: note: candidates are: 'namespace std::ranges { }'
  163 |   namespace ranges
      |             ^~~~~~
events.cpp:5:36: note:                 'std::vector<std::pair<std::pair<int, int>, int> > ranges'
    5 | vector<pair<pair<int, int>, int> > ranges;
      |                                    ^~~~~~
events.cpp:76:9: error: reference to 'ranges' is ambiguous
   76 |         ranges[i].first={endpointsMap[ranges[i].first.first], endpointsMap[ranges[i].first.second]};
      |         ^~~~~~
In file included from /usr/include/c++/11/compare:39,
                 from /usr/include/c++/11/bits/stl_pair.h:65,
                 from /usr/include/c++/11/bits/stl_algobase.h:64,
                 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 events.cpp:1:
/usr/include/c++/11/concepts:163:13: note: candidates are: 'namespace std::ranges { }'
  163 |   namespace ranges
      |             ^~~~~~
events.cpp:5:36: note:                 'std::vector<std::pair<std::pair<int, int>, int> > ranges'
    5 | vector<pair<pair<int, int>, int> > ranges;
      |                                    ^~~~~~
events.cpp:76:39: error: reference to 'ranges' is ambiguous
   76 |         ranges[i].first={endpointsMap[ranges[i].first.first], endpointsMap[ranges[i].first.second]};
      |                                       ^~~~~~
In file included from /usr/include/c++/11/compare:39,
                 from /usr/include/c++/11/bits/stl_pair.h:65,
                 from /usr/include/c++/11/bits/stl_algobase.h:64,
                 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 events.cpp:1:
/usr/include/c++/11/concepts:163:13: note: candidates are: 'namespace std::ranges { }'
  163 |   namespace ranges
      |             ^~~~~~
events.cpp:5:36: note:                 'std::vector<std::pair<std::pair<int, int>, int> > ranges'
    5 | vector<pair<pair<int, int>, int> > ranges;
      |                                    ^~~~~~
events.cpp:76:76: error: reference to 'ranges' is ambiguous
   76 |         ranges[i].first={endpointsMap[ranges[i].first.first], endpointsMap[ranges[i].first.second]};
      |                                                                            ^~~~~~
In file included from /usr/include/c++/11/compare:39,
                 from /usr/include/c++/11/bits/stl_pair.h:65,
                 from /usr/include/c++/11/bits/stl_algobase.h:64,
                 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 events.cpp:1:
/usr/include/c++/11/concepts:163:13: note: candidates are: 'namespace std::ranges { }'
  163 |   namespace ranges
      |             ^~~~~~
events.cpp:5:36: note:                 'std::vector<std::pair<std::pair<int, int>, int> > ranges'
    5 | vector<pair<pair<int, int>, int> > ranges;
      |                                    ^~~~~~
events.cpp:77:22: error: reference to 'ranges' is ambiguous
   77 |         endpointsSet[ranges[i].first.second].push_back({ranges[i].first.first, ranges[i].second});
      |                      ^~~~~~
In file included from /usr/include/c++/11/compare:39,
                 from /usr/include/c++/11/bits/stl_pair.h:65,
                 from /usr/include/c++/11/bits/stl_algobase.h:64,
                 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 events.cpp:1:
/usr/include/c++/11/concepts:163:13: note: candidates are: 'namespace std::ranges { }'
  163 |   namespace ranges
      |             ^~~~~~
events.cpp:5:36: note:                 'std::vector<std::pair<std::pair<int, int>, int> > ranges'
    5 | vector<pair<pair<int, int>, int> > ranges;
      |                                    ^~~~~~
events.cpp:77:57: error: reference to 'ranges' is ambiguous
   77 |         endpointsSet[ranges[i].first.second].push_back({ranges[i].first.first, ranges[i].second});
      |                                                         ^~~~~~
In file included from /usr/include/c++/11/compare:39,
                 from /usr/include/c++/11/bits/stl_pair.h:65,
                 from /usr/include/c++/11/bits/stl_algobase.h:64,
                 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 events.cpp:1:
/usr/include/c++/11/concepts:163:13: note: candidates are: 'namespace std::ranges { }'
  163 |   namespace ranges
      |             ^~~~~~
events.cpp:5:36: note:                 'std::vector<std::pair<std::pair<int, int>, int> > ranges'
    5 | vector<pair<pair<int, int>, int> > ranges;
      |                                    ^~~~~~
events.cpp:77:80: error: reference to 'ranges' is ambiguous
   77 |         endpointsSet[ranges[i].first.second].push_back({ranges[i].first.first, ranges[i].second});
      |                                                                                ^~~~~~
In file included from /usr/include/c++/11/compare:39,
                 from /usr/include/c++/11/bits/stl_pair.h:65,
                 from /usr/include/c++/11/bits/stl_algobase.h:64,
                 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 events.cpp:1:
/usr/include/c++/11/concepts:163:13: note: candidates are: 'namespace std::ranges { }'
  163 |   namespace ranges
      |             ^~~~~~
events.cpp:5:36: note:                 'std::vector<std::pair<std::pair<int, int>, int> > ranges'
    5 | vector<pair<pair<int, int>, int> > ranges;
      |                                    ^~~~~~