求救P1083
  • 板块灌水区
  • 楼主梦回江南
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/2/25 13:16
  • 上次更新2023/10/28 07:47:40
查看原帖
求救P1083
492676
梦回江南楼主2022/2/25 13:16
#include <cstdio>
#include <memory.h>
#define maxn 1000000
using namespace std;

int ans;
int n, m;
int r[maxn + 5], d[maxn + 5], s[maxn + 5], t[maxn + 5];

// 输入
void input()
{
    scanf("%d %d", &n, &m);
    for (int i = 1; i <= n; i++)
        scanf("%d", &r[i]);
    for (int i = 1; i <= m; i++)
        scanf("%d %d %d", &d[i], &s[i], &t[i]);
}

// 检查答案是否可行
bool check(int x)
{
    printf("1");
    int cf[maxn], sum[maxn];
    memset(cf, 0, sizeof(cf));
    for (int i = 1; i <= x; i++)
    {
        cf[s[i]] += d[i];
        cf[t[i] + 1] -= d[i];
    }
    for (int i = 1; i <= n; i++)
    {
        sum[i] = cf[i] + sum[i - 1];
        if (sum[i] > r[i])
            return 0;
    }
    return 1;
}

// 二分
int BiSearch()
{
    int l = 1, ri = m;
    while (l < ri)
    {
        int mid = (l + ri) >> 1;
        if (check(mid))
            l = mid + 1;
        else
            ri = mid;
    }

    return l;
}

int main()
{
    input();
    if (check(m))
    {
        printf("0");
        return 0;
    }
    ans = BiSearch();
    printf("-1\n%d", ans);
    return 0;
}

为啥一直没输出?

2022/2/25 13:16
加载中...