답안 #1015663

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1015663 2024-07-06T16:13:40 Z vjudge1 Meteors (POI11_met) C++17
62 / 100
601 ms 65536 KB
    //
    //  main1.cpp
    //  problem1
    //
    //  Created by Essa Almousa on 2030 / 01/ 01 AD.
    //

    #include <bits/stdc++.h>

    using namespace std;
    #define endl '\n'
    using ll = __int128;
    using ll1 = long long;
    #define pb push_back
    #define pF first
    #define pS second
    #define SP <<" "<<
    const ll N = 3e5+10;

    struct segment {
        vector<ll> tree;
        ll offset = 1;
        void it(ll n) {
            while (offset < n) offset *= 2;
            tree.resize(offset*2, 0);
        }
        void upd(ll v, ll l, ll r, ll ql, ll qr, ll x) {
            if (l >= qr || r <= ql) return;
            if (l >= ql && r <= qr) {tree[v] += x; return;}
            ll mi = (l+r)/2;
            upd(v*2, l, mi, ql, qr, x);
            upd(v*2+1, mi, r, ql, qr, x);
        }
        ll query(ll i) {
            i--;
            i += offset;
            ll ans = 0;
            while (i >= 1) {
                ans += tree[i];
                i /= 2;
            }
            return ans;
        }
        void upd(ll l, ll r, ll val) {return upd(1, 0, offset, l-1, r, val);}
    };

    struct query_ {
        ll l, r, x;
    };
    ll a[N], b[N];
    ll1 sol[N];
    vector<ll> frq[N];
    query_ q[N];

    int main() {
        //ios::sync_with_stdio(0); cout.tie(0); cin.tie(0);
        ll1 n, m;
        cin>>n>>m;
        for (ll i=1; i<=m; i++) {
            int temp; cin >> temp;
            a[i] = temp;
            //cin>>a[i];
            frq[a[i]].pb(i);
        }
        
        for (ll i=1; i<=n; i++) {
            int temp; cin >> temp;
            b[i] = temp;
            //cin>>b[i];
        }
        
        ll1 q1;
        cin>>q1;
        
        struct binnode { ll i, m, l, r; };
        
        vector<binnode> bin[N];
        for (ll i=1; i<=n; i++) {
            ll mi = q1+1/2;
            bin[mi].pb({i, mi, 1, q1});
        }

        for (ll i=1; i<=q1; i++) {
            ll1 l, r, x;
            cin>>l>>r>>x;
            q[i] = {l, r, x};
            sol[i] = -1;
        }
        ll1 cnt = n;
        while (cnt > 0) {
            segment tree;
            tree.it(m);
            for (ll i=1; i<=q1; i++) {
                if (q[i].l > q[i].r) {
                    tree.upd(q[i].l, m, q[i].x);
                    tree.upd(1, q[i].r, q[i].x);
                }
                else tree.upd(q[i].l, q[i].r, q[i].x);
                
                for (ll1 j = bin[i].size()-1; j >= 0; j = bin[i].size()-1) {
                    binnode& x = bin[i][j];
                    ll ans = 0; // the num
                    for (ll k=0; k < frq[x.i].size(); k++) ans += tree.query(frq[x.i][k]);
                    if (ans >= b[x.i]) x.r = x.m;
                    else {
                        if (x.l >= q1) {cnt--;bin[i].pop_back(); continue;};
                        x.l = x.m+1;
                    }
                    ll mid = (x.l+x.r)/2;
                    if (x.l != x.r) {bin[mid].pb({x.i, mid, x.l, x.r}); cnt++;}
                    else sol[x.i] = x.l;
                    bin[i].pop_back();
                    cnt--;
                    j = bin[i].size() - 1;
                }
            }
        }
        for (ll i=1; i<=n; i++) {
            if (sol[i] == -1) cout << "NIE" << endl;
            else cout << sol[i] << endl;
        }
    }

# 결과 실행 시간 메모리 Grader output
1 Correct 10 ms 16220 KB Output is correct
2 Correct 10 ms 17756 KB Output is correct
3 Correct 9 ms 16476 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 16472 KB Output is correct
2 Correct 9 ms 18012 KB Output is correct
3 Correct 10 ms 16732 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 448 ms 23360 KB Output is correct
2 Correct 482 ms 25032 KB Output is correct
3 Correct 488 ms 38984 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 482 ms 34880 KB Output is correct
2 Correct 496 ms 34844 KB Output is correct
3 Correct 601 ms 48452 KB Output is correct
4 Incorrect 63 ms 28996 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 214 ms 28284 KB Output is correct
2 Correct 402 ms 35512 KB Output is correct
3 Correct 230 ms 19540 KB Output is correct
4 Correct 516 ms 42312 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 525 ms 23280 KB Output is correct
2 Correct 538 ms 34256 KB Output is correct
3 Correct 430 ms 25168 KB Output is correct
4 Correct 529 ms 50236 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 249 ms 65536 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 238 ms 65536 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -