题目传送门:https://www.acwing.com/problem/content/2043/
解题思路:数据范围1e6,不是很大,差分即可,线段树都用不上。
通过差分,进行区间加高指令;然后遍历一边,前缀和还原数组;接着来个sort排序,最后输出中间值即大功告成。
代码如下:
#include<iostream>
#include<algorithm>
#include<string>
#include<map>
#include<cmath>
#include<queue>
#include<stack>
using namespace std;
#define ll long long
const int maxn=1e6+20;
int c[maxn];//差分数组
int a[maxn];
int main() {
int n,k;
cin>>n>>k;
while(k--){
int a,b;
cin>>a>>b;
c[a]++;
c[b+1]--;
}
int sum=0;
for(int i=1;i<=n;i++){
sum+=c[i];
a[i]=sum;
}
//for(int i=1;i<=n;i++)cout<<a[i]<<' ';
sort(a+1,a+n+1);
cout<<a[n/2+1];
return 0;
}