我有问题
查看原帖
我有问题
1235819
_xzhdsnh1364楼主2025/6/22 17:53
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e6 + 5;
int n , m , r[N] , d[N] , s[N] , t[N] , di[N] , ans[N];
bool check(int mid){
    for(int i = 1;i <= n;i++)di[i] = 0;
    for(int i = 1;i <= mid;i++){
        di[s[i]] += d[i];
        di[t[i] + 1] -= d[i];
    }
    for(int i = 1;i <= n;i++){
        ans[i] = ans[i - 1] + di[i];
        if(ans[i] > r[i])return false;
    }
    return true;
}
signed main(){
    cin >> n >> m;
    for(int i = 1;i <= n;i++)cin >> r[i];
    for(int i = 1;i <= m;i++)cin >> d[i] >> s[i] >> t[i];
    if(check(m)){
        cout << 0;
        return 0;
    }
    int l = 1 , r = m;
    while(l != r){
        int mid = l + r + 1 >> 1;
        if(check(mid))l = mid;
        else r = mid - 1;
    }
    cout << -1 << '\n' << l + 1;
    return 0;
}
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e6 + 5;
int n , m , r[N] , d[N] , s[N] , t[N] , di[N] , ans[N];
bool check(int mid){
    for(int i = 1;i <= n;i++)di[i] = 0;
    for(int i = 1;i <= mid;i++){
        di[s[i]] += d[i];
        di[t[i] + 1] -= d[i];
    }
    for(int i = 1;i <= n;i++){
        ans[i] = ans[i - 1] + di[i];
        if(ans[i] > r[i])return false;
    }
    return true;
}
signed main(){
    cin >> n >> m;
    for(int i = 1;i <= n;i++)cin >> r[i];
    for(int i = 1;i <= m;i++)cin >> d[i] >> s[i] >> t[i];
    if(check(m)){
        cout << 0;
        return 0;
    }
    int l = 1 , r = m;
    while(l != r){
        int mid = l + r >> 1;
        if(check(mid))l = mid + 1;
        else r = mid;
    }
    cout << -1 << '\n' << l;
    return 0;
}

为什么第一份代码95pts,第二份100pts

2025/6/22 17:53
加载中...