欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

洛谷 P2879 [USACO07JAN]区间统计Tallest Cow

程序员文章站 2022-07-12 17:38:14
...

目录:


题目:

传送门


分析:

我们有一个简单而高效的做法,就是建一个D数组,对于每对牛(AB),令D[A+1]1D[B]+1。其含义是:“身高减小1”的影响从A+1开始,持续到B1,在B结束。最后,用数组C计算D的前缀和,输出数组C的值+最高的身高即可。


代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#define LL long long
using namespace std;
inline LL read() {
    LL d=0,f=1;char s=getchar();
    while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
    while(s>='0'&&s<='9'){d=d*10+s-'0';s=getchar();}
    return d*f;
}
map<pair<int,int>,bool> e;
int d[10001],c[10001];
int main()
{
    int a,b;
    int n=read(),p=read(),h=read(),m=read();
    for(int i=1;i<=m;i++)
    {
        a=read();b=read();
        if(a>b) swap(a,b);
        if(e[make_pair(a,b)]) continue;
        d[a+1]--;d[b]++;
        e[make_pair(a,b)]=true;
    }
    for(int i=1;i<=n;i++)
    {
        c[i]=c[i-1]+d[i];
        printf("%d\n",h+c[i]);
    }
    return 0;
}
相关标签: 前缀和