为什么使用cin读入优化后只有5分,去掉AC,求佬解惑
查看原帖
为什么使用cin读入优化后只有5分,去掉AC,求佬解惑
558078
HXroot楼主2023/5/5 18:18
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
typedef long long LL;
LL a[N], w[N], L[N], R[N], D[N], s[N];
int n, m;
int check(int mid)
{
    for (int i = 1; i <= n; i ++) w[i] = a[i] - a[i - 1];
    for (int i = 1; i <= mid; i ++)
    {
        w[L[i]] -= D[i];
        w[R[i] + 1] += D[i];
    }
    for (int i = 1; i <= n; i ++)
    {
        w[i] += w[i - 1];
        if (w[i] < 0) return 1;
    }
    return 0;
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> m;
    for (int i = 1; i <= n; i ++) 
    {
        cin >> a[i];
        s[i] = a[i] - a[i - 1];
    }
    for (int i = 1; i <= m; i ++)
    {
        cin >> D[i] >> L[i] >> R[i];
        s[L[i]] -= D[i];
        s[R[i] + 1] += D[i]; 
    }
    int x = 1;
    for (int i = 1; i <= n; i ++) 
    {
        s[i] += s[i - 1];
        if (s[i] < 0) 
        {
            x = 0;
            break;
        }
    }
    if (x) puts("0");
    else
    {
        puts("-1");
        int l = 1, r = m;
        while (l < r)
        {
            int mid = l + r >> 1;
            if (check(mid)) r = mid;
            else l = mid + 1;
        }
        cout << r << '\n';
    }
    return 0;
}
2023/5/5 18:18
加载中...