同济网络赛 排列计算【差分,前缀和】

 

 这题....我WA在没开longlong [手动微笑】

#include <bits/stdc++.h>
const int maxn=2e5+50;
const int INF=0x3f3f3f3f;
using namespace std;
long long a[maxn]={0};
int main(){
    int m,n;
    cin>>n>>m;
    for(int i=1;i<=m;i++){//差分数组
        int x,y;
        cin>>x>>y;
        a[x]+=1;
        a[y+1]-=1;
    }
    for(int i=1;i<=n;i++){//通过前缀和得到原数组
        a[i]+=a[i-1];
    }
    sort(a+1,a+n+1);
//    for(int i=1;i<=n;i++)cout<<a[i]<<" ";
    long long sum=0;
    for(long long i=1;i<=n;i++){//快乐计算然后WA在int
        sum+=a[i]*i;
    }
    cout<<sum;

return 0;
}

还是放一下官方题解

 

posted @ 2020-05-10 21:45  小靖快去敲代码  阅读(113)  评论(0编辑  收藏  举报