This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define pii pair<int, int>
#define fr first
#define sc second
const int B = 17;
int n;
struct Rmq
{
int rmq[B][100005];
void build(int arr[])
{
for(int i = 1; i <= n; i ++)
rmq[0][i] = arr[i];
for(int p = 0; p + 1 < B; p ++)
for(int i = 1; i <= n - (1 << p); i ++)
rmq[p + 1][i] = min(rmq[p][i], rmq[p][i + (1 << p)]);
}
int query(int l, int r)
{
int p = __lg(r - l + 1);
return min(rmq[p][l], rmq[p][r - (1 << p) + 1]);
}
} ds;
int q, rk[100005], ord[100005], lift[20][100005], lst[100005], ans[100005], start[100005];
pii p[100005], rng[100005];
signed main()
{
ios_base::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> n >> q;
for(int i = 1; i <= n; i ++)
cin >> p[i].fr >> p[i].sc;
for(int i = 1; i <= n; i ++)
rk[i] = i;
sort(rk + 1, rk + 1 + n, [&](int i, int j)
{
return p[i].sc < p[j].sc;
});
for(int i = 1; i <= n; i ++)
ord[rk[i]] = i;
sort(p + 1, p + 1 + n, [&](pii i, pii j)
{
return i.sc < j.sc;
});
for(int i = 1; i <= n; i ++)
lift[0][i] = lower_bound(p + 1, p + 1 + n, pii(0, p[i].fr), [](pii i, pii j)
{
return i.sc < j.sc;
}) - p;
for(int i = 1; i <= n; i ++)
lst[i] = upper_bound(p + 1, p + 1 + n, pii(0, p[i].sc), [](pii i, pii j)
{
return i.sc < j.sc;
}) - p - 1;
for(int p = 0; p + 1 < B; p ++)
{
ds.build(lift[p]);
for(int i = 1; i <= n; i ++)
lift[p + 1][i] = ds.query(lift[p][i], lst[i]);
}
for(int i = 1; i <= q; i ++)
{
int u, v;
cin >> u >> v;
if(u == v)
ans[i] = -1;
start[i] = ord[u];
rng[i] = pii(ord[v], ord[v]);
}
for(int p = B - 1; p >= 0; p --)
{
ds.build(lift[p]);
for(int i = 1; i <= q; i ++)
{
pii nrange = pii(ds.query(rng[i].fr, rng[i].sc), lst[rng[i].sc]);
if(start[i] < nrange.fr || nrange.sc < start[i])
{
ans[i] += (1 << p);
rng[i] = nrange;
}
}
}
for(int i = 1; i <= q; i ++)
if(ans[i] >= n)
cout << "impossible\n";
else
cout << ans[i] + 1 << '\n';
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |