C/C++教程

AcWing 2041.干草堆

本文主要是介绍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;
}

这篇关于AcWing 2041.干草堆的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!