#pragma GCC optimize("O3")
#pragma GCC target("avx,avx2")
#include <iostream>
#include <vector>
#include <string>
#include <math.h>
#include <cmath>
#include <iomanip>
#include <cstdio>
#include <algorithm>
#include <numeric>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <deque>
#include <bitset>
#include <cstring>
#include <unordered_map>
using namespace std;
typedef int ll;
struct one{
ll first, second, ind;
};
bool cmp(one &p1, one &p2){
if(p1.second == p2.second)
return p1.first < p2.first;
return p1.second < p2.second;
}
void compress(vector<one> &a){
vector<ll>b;
for(auto i: a){
b.push_back(i.first);
b.push_back(i.second);
}
sort(b.begin(), b.end());
b.resize(unique(b.begin(), b.end()) - b.begin());
ll step = 1;
map<ll, ll> mp;
for(auto i: b)
mp[i] = step++;
for(auto &i: a){
i.first = mp[i.first];
i.second = mp[i.second];
}
}
vector<ll>start_here[2 * 1000007];
vector<one>a;
#define endl '\n'
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
ll n, q;
cin >> n >> q;
a.resize(n);
for(int i = 0; i < n; i++){
cin >> a[i].first >> a[i].second;
a[i].ind = i;
}
compress(a);
sort(a.begin(), a.end(), cmp);
for(auto i: a)
start_here[i.first].push_back(i.ind);
ll l, r;
vector<ll>dp(n + 1);
while(q--){
cin >> l >> r;
//l = 1 + rand() % n, r = 1 + rand() % n;
l--, r--;
for(int i = 0; i < a.size(); i++)
dp[i] = 1e9;
dp[r] = 0;
bool ok = true;
multiset<ll>st;
for(int ind = a.size(); ind >= 0; ind--){
auto i = a[ind];
if(i.ind == r){
ok = true;
st.insert(0);
}
else if(ok){
if(st.empty()){
dp[i.ind] = 1e9;
}
else{
dp[i.ind] = *st.begin();
dp[i.ind]++;
st.insert(dp[i.ind]);
}
}
if(ind - 1 >= 0){
for(int del = i.second; del > a[ind - 1].second; del--)
for(auto j: start_here[del]){
if(st.find(dp[j]) != st.end())
st.erase(st.find(dp[j]));
}
}
}
if(dp[l] == (ll)(1e9))
cout << "impossible" << endl;
else{
cout << dp[l] << endl;
}
}
return 0;
}
/*
8 1
1 2
3 4
1 5
6 7
5 10
10 20
15 20
999999999 1000000000
1 7
*/
/*
1 2
1 1000000000
*/
/*
5 9
2 0
*/
/*
10 100
1 3
4 6
2 8
8 23
1 4
2 4
6 73
2 34
1 9
8 90
2 3
*/
Compilation message
events.cpp: In function 'int main()':
events.cpp:93:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<one>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
93 | for(int i = 0; i < a.size(); i++)
| ~~^~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
24 ms |
47216 KB |
Output is correct |
2 |
Execution timed out |
1575 ms |
53840 KB |
Time limit exceeded |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
25 ms |
47188 KB |
Output is correct |
2 |
Correct |
24 ms |
47176 KB |
Output is correct |
3 |
Correct |
29 ms |
47356 KB |
Output is correct |
4 |
Correct |
28 ms |
47328 KB |
Output is correct |
5 |
Correct |
29 ms |
47260 KB |
Output is correct |
6 |
Correct |
30 ms |
47324 KB |
Output is correct |
7 |
Correct |
47 ms |
47396 KB |
Output is correct |
8 |
Correct |
30 ms |
47316 KB |
Output is correct |
9 |
Correct |
31 ms |
47316 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
25 ms |
47188 KB |
Output is correct |
2 |
Correct |
24 ms |
47176 KB |
Output is correct |
3 |
Correct |
29 ms |
47356 KB |
Output is correct |
4 |
Correct |
28 ms |
47328 KB |
Output is correct |
5 |
Correct |
29 ms |
47260 KB |
Output is correct |
6 |
Correct |
30 ms |
47324 KB |
Output is correct |
7 |
Correct |
47 ms |
47396 KB |
Output is correct |
8 |
Correct |
30 ms |
47316 KB |
Output is correct |
9 |
Correct |
31 ms |
47316 KB |
Output is correct |
10 |
Correct |
26 ms |
47288 KB |
Output is correct |
11 |
Correct |
25 ms |
47264 KB |
Output is correct |
12 |
Correct |
30 ms |
47316 KB |
Output is correct |
13 |
Correct |
26 ms |
47340 KB |
Output is correct |
14 |
Correct |
28 ms |
47376 KB |
Output is correct |
15 |
Correct |
32 ms |
47244 KB |
Output is correct |
16 |
Correct |
33 ms |
47424 KB |
Output is correct |
17 |
Correct |
34 ms |
47308 KB |
Output is correct |
18 |
Correct |
31 ms |
47280 KB |
Output is correct |
19 |
Execution timed out |
1580 ms |
47708 KB |
Time limit exceeded |
20 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
25 ms |
47188 KB |
Output is correct |
2 |
Correct |
24 ms |
47176 KB |
Output is correct |
3 |
Correct |
29 ms |
47356 KB |
Output is correct |
4 |
Correct |
28 ms |
47328 KB |
Output is correct |
5 |
Correct |
29 ms |
47260 KB |
Output is correct |
6 |
Correct |
30 ms |
47324 KB |
Output is correct |
7 |
Correct |
47 ms |
47396 KB |
Output is correct |
8 |
Correct |
30 ms |
47316 KB |
Output is correct |
9 |
Correct |
31 ms |
47316 KB |
Output is correct |
10 |
Correct |
27 ms |
47188 KB |
Output is correct |
11 |
Correct |
26 ms |
47280 KB |
Output is correct |
12 |
Correct |
32 ms |
47380 KB |
Output is correct |
13 |
Correct |
29 ms |
47316 KB |
Output is correct |
14 |
Correct |
27 ms |
47312 KB |
Output is correct |
15 |
Correct |
31 ms |
47312 KB |
Output is correct |
16 |
Correct |
34 ms |
47308 KB |
Output is correct |
17 |
Correct |
31 ms |
47300 KB |
Output is correct |
18 |
Correct |
34 ms |
47352 KB |
Output is correct |
19 |
Correct |
505 ms |
53928 KB |
Output is correct |
20 |
Correct |
357 ms |
55088 KB |
Output is correct |
21 |
Correct |
832 ms |
55724 KB |
Output is correct |
22 |
Incorrect |
335 ms |
57520 KB |
Output isn't correct |
23 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
1586 ms |
53836 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
24 ms |
47216 KB |
Output is correct |
2 |
Execution timed out |
1575 ms |
53840 KB |
Time limit exceeded |
3 |
Halted |
0 ms |
0 KB |
- |