题目
思考
这是一道经典的差分题。
先看
N
N
N的范围:10^6,
K
K
K是25000,可见如果用双重循环是绝对超时的,要运行
N
∗
K
N*K
N∗K=250亿遍,是不现实的;如用差分,那只要用
N
N
N次就行了,效率提高了约
25000
25000
25000遍,再
s
o
r
t
sort
sort一下就行了。
代码
#include<bits/stdc++.h>
#pragma GCC optimize(3"Ofast","inline")
#pragma GCC optimize(2)
using namespace std;
int n,k,x,y,a[1000005];
signed main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin>>n>>k;
for(int i=1;i<=k;i++){
cin>>x>>y;
a[x]++,a[y+1]--;
}
for(int i=1;i<=n;i++) a[i]+=a[i-1];
sort(a+1,a+1+n);
cout<<a[n/2+1];
return 0;
}
算法
差分快排