题目传送门: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; }