求助 二分部分运行有问题
查看原帖
求助 二分部分运行有问题
757864
ruye楼主2024/3/5 21:22
//#pragma GCC optimize(2)
//#pragma GCC optimize(3,"Ofast","inline")
#include <bits/stdc++.h> // By Lucky Ox
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define int long long
#define double long double
#define endl "\n"
#define pii pair<int, int>
#define tans cout << "答案:"
using namespace std;
using i128 = __int128;
const int mod = 1000000000000002493, INF = 0x3f3f3f3f3f3f3f3f;
int lcm(int x, int y) {return x*y/__gcd(x, y);}
int q_pow(int a, int k) {int res=1;while(k){if(k&1)res=res*a%mod;k>>=1;a=a*a%mod;}return res;}
int len_10(int x){int len=0;while(x){x/=10;len++;}return len;}int len_2(int x){int len=0;while(x){x/=2;len++;}return len;}
// 求在10/2进制下的位数

const int N = 1e6 + 10;
int n, m;
int r[N], d[N], s[N], t[N];

bool check(int x) {
    auto tmp = r;

    for(int i = 1; i <= x; i ++ ) {
        tmp[s[i]] -= d[i];
        tmp[t[i] + 1] += d[i];
    }

    for(int i = 1; i <= n; i ++ ) {
        tmp[i] += tmp[i - 1];
        if(tmp[i] < 0) return 1;
    }
    return 0;
}

void solve() {
    cin >> n >> m;
    for(int i = 1; i <= n; i ++ ) cin >> r[i], r[i] -= r[i - 1];
    for(int i = 1; i <= m; i ++ ) cin >> d[i] >> s[i] >> t[i];

    int l = 1, r = m;
    while(l <= r) {
        cout << l << " " << r << endl;
        int mid = (l + r) >> 1;
        if(check(mid)) r = mid - 1;
        else l = mid + 1;
        cout << mid << " " << check(mid) << endl;
        cout << l << " " << r << endl << endl;
    }

    if(l == m + 1) cout << 0 << endl;
    else 
        cout << -1 << endl << l << endl;
}

void init() {

}

signed main() {
    IOS;
    cout << fixed << setprecision(10);
    init();
    int T = 1;
    //cin >> T;
    while (T -- ) solve();
    return 0;
}
2024/3/5 21:22
加载中...