思路
- 我们可以很容易想到,这题应该是先找到第一个包含x这个点的区间,然后后面的区间如果和这个区间有交集的话,就并在一起,不断扩展,最后这个区间的长度就是k可能的取值,当然,最后要判断一下有没有区间包含这个点,如果没有就输出1.
代码
#include <stack>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main(){
int T;
cin >> T;
while(T--){
int n,m,x;
cin >> n >> x >> m;
int l,r;
cin >> l >> r;
bool flag=false;
for(int i=1;i<m;i++){
int a,b;
cin >> a >> b;
if(l<=x&&r>=x){
flag=true;
}
if(flag){
if(b>=r&&a<=r){r=b;}
if(a<=l&&b>=l){l=a;}
if(a<=l&&b>=r){l=a;r=b;}
}else{
l=a;r=b;
}
}
if(l<=x&&r>=x){
cout << r-l+1 << "\n";
}else{
cout << 1 << "\n";
}
}
}