AcWing 2041.干草堆

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

上一篇:烦人的幻灯片 Sorting Slides


下一篇:CF1244D Paint the Tree 题解