排列计算--题解

排列计算

http://www.nowcoder.com/questionTerminal/3c01283b486b40b1be29ea610247d4f5

根据题意可以推出在排列中将出现次数最多的地方放上最大的数,剩下的依次递减。要计算每个位置出现的位置,依据数据范围,暴力模拟会WA,简单差分一下就可以了。
代码如下:

#include<iostream>
#include<algorithm>
using namespace std;
int a[200010];
bool cmp(int a, int b)
{
    return a > b;
}
int main()
{
    int n, m;
    cin >> n >> m;
    while (m--)
    {
        int l, r;
        cin >>l >> r;
        a[l] += 1;
        a[r + 1] -= 1;

    }
    for (int i = 1;i <= n;i++)
        a[i] = a[i - 1] + a[i];
    sort(a + 1, a + 1 + n, cmp);
    long long int ans = 0,i=1;
    while (a[i])
    {
        ans += a[i] * (n + 1 - i);
        i++;
    }
    cout << ans << endl;
    return 0;
}

求牛币,QWQ。

全部评论

相关推荐

凌小云:问题太大了,首先把教育背景放前面。不然简历不用看就看被pass了。然后两个项目写了和没写一样,不如商城+点评的描述。那专业技能,前面来个技术名,后面一点都不见具体那些了。你说你熟练java,说说java反射实现方式,那些地方用,io都有那些。这让面试官怎么问。这份简历看下来,没一点问的希望。看着技术栈用的多,亮点也没解决什么实际问题。很差的一份简历,患上技术堆砌的毛病了
我的简历长这样
点赞 评论 收藏
分享
11-03 18:50
门头沟学院 Java
迷茫的大四🐶:问就是马上到,一周五天,6个月以上,全国可飞
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务