问题:
解析:
发现问题的参数量不大,所以直接使用差分的方法求解即可,此处只需要记录第一个数的大小即可(用于恢复数组值),恢复后的数组sort一下即可,中间的数即为中位数。
代码:
#include<bits/stdc++.h>
using namespace std;
int N, K;
//int n = 1e6 + 9;
int S[1000009];
int main()
{
int A, B;
int a = 0; //用来记录第一块砖数量
cin >> N >> K;
for (int i = 1; i <= K; i++) {
cin >> A>> B;
if (A == 1) a++;
else {
S[A]++;
}
S[B + 1]--;
}
//恢复数组
S[1] = a;
for (int i = 2; i <= N; i++) {
S[i] += S[i - 1];
}
sort(S+1,S+N+1);
//for (int i = 0; i <= N; i++) {
// cout << S[i] << endl;
//}
cout << S[(N + 1) / 2];
return 0;
}