51Nod(1627)

来源:互联网 发布:windows高级选项菜单 编辑:程序博客网 时间:2024/06/06 19:12

贪心 区间技巧。

#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<set>using namespace std;typedef long long ll;typedef pair<int,int > P;const int maxn = 100005;ll num[maxn];ll sum[maxn];P p[maxn];multiset<int>s;int main(){    int n,k,m,u,v;    scanf("%d%d%d",&n,&k,&m);    for(int i=1;i<=n;i++) scanf("%I64d",&num[i]);    sum[0] = 0; for(int i=1;i<=n;i++) sum[i] = sum[i-1] + num[i];    for(int i=0;i<m;i++)    {        scanf("%d%d",&u,&v); p[i] = make_pair(u,v);    }    sort(p,p+m); multiset<int>::iterator it; ll ans = 0;    for(int i=0;i<m;i++)    {        u = p[i].first; s.insert(p[i].second);        while(s.size())        {            if(*(s.begin())<u) s.erase(s.begin());else break;        }        while((int)s.size()>k) s.erase(s.begin());        if((int)s.size()==k) { ans = max(ans,sum[*s.begin()]-sum[u-1]); }    }    printf("%lld\n",ans);    return 0;}


原创粉丝点击