Educational Codeforces #61 (Div. 2) C. Painting the Fence (前缀和)

题目 https://codeforces.com/problemset/problem/1132/C

参考了 http://www.pianshen.com/article/4932273340/ 这位巨巨的代码 思路非常清晰,没什么好说的了 自己太菜了 疯狂wa

#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<iostream>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<queue>
#include<stdlib.h>
#include<algorithm>
#include<time.h>
#define bug1(g) cout<<"test: "<<g<<endl
#define bug2(g,i) cout<<"test: "<<g<<" "<<i<<endl
#define bug3(g,i,k) cout<<"test: "<<g<<" "<<i<<" "<<k<<endl
using namespace std;
typedef  long long ll;
int n,q;
int a[5005],l[5005],r[5005];
int s[5][5005],maxx,ans;
int get(int l,int r,int i)
{
  return s[i][r]-s[i][l-1];
}
int main()
{
    cin>>n>>q;
    for(int i =1;i<=q;i++)
    {
        cin>>l[i]>>r[i];
        for(int j=l[i];j<=r[i];j++)
        {
            ++a[j];
        }
    }
    for(int i =1;i<=n;i++)
    {
        if(a[i]<=2)
            for(int j=i;j<=n;j++)
                s[a[i]][j]++;
    }
    for(int i =1;i<=q;i++)
    {
        for(int j =i+1;j<=q;j++)
        {
            int tmp=n;
          tmp-=get(1,n,0);
          tmp-=get(l[i],r[i],1);
          tmp-=get(l[j],r[j],1);
         int ll =max(l[i],l[j]),rr=min(r[i],r[j]);
         if(ll<=rr)
         {
            tmp-=get(ll,rr,2);
         }
         ans=max(ans,tmp);
        }
    }
    cout<<ans<<endl;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值