求hack
  • 板块P8551 Bassline
  • 楼主Willow_Liu
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/9/27 18:43
  • 上次更新2023/10/27 09:45:40
查看原帖
求hack
227950
Willow_Liu楼主2022/9/27 18:43
#include <iostream>
#define int long long

using namespace std;

const int N = 3e5 + 20;

int l[N], r[N], m[N], p[N], k[N];
int n;

signed main()
{
    cin >> n;
    int last = 0, st;
    int o = 0;
    for (int i = 1; i <= n; i ++ )
    {
        scanf("%d%d", &l[i], &r[i]);
        p[l[i]] += 1;
        p[r[i] + 1] -= 1;
        o = max(o, r[i]);
        m[l[i]] = 1;
        m[r[i]] = 1;
        if(k[l[i]] == 2) k[l[i]] = 3;
        else k[l[i]] = 1;
        if(k[r[i]] == 1) k[r[i]] = 3;
        else k[r[i]] = 2;
    }
   // cout << p[1] << " ";
    for (int i = 2; i <= o; i ++ )
    {
        p[i] += p[i - 1];
      //  cout << p[i] << " " ;
    }
    //cout << endl;
    for (int i = 1; i <= o; i ++ )
    {
        p[i] *= i;
    }
    long long ans = 0;
    int l1 = 0, r1 = 0;
    for (int i = 1; i <= o; i ++ )
    {
        if(!l1 && m[i])
        {
            l1 = i;
        }
        else if(l1 && m[i])
        {
            r1 = i;
            int l2 = l1, r2 = r1;
            if(k[l1] == 2 && k[r1] == 1)
            {
                l1 = r1;
                r1 = 0;
            }
            if(k[l1] == 2 || k[l1] == 3)
            {
                l2 ++;
            }
            if(k[r1] == 1 || k[r1] == 3)
            {
                r2 --;
            }
            ans = max(ans, p[r2] - p[l2]);
            l1 = r1;
            r1 = 0;
        }
    }
    cout << ans;
    return 0;
}
2022/9/27 18:43
加载中...