Submission #1186299

#TimeUsernameProblemLanguageResultExecution timeMemory
1186299jasonicHorses (IOI15_horses)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define fastIO cin.tie(0); ios::sync_with_stdio(false)
#define MOD 1000000007

struct ST{
    double v, rv;
    double bsY;
    ll rprod, prod;
    ll ans;
    ll bsY_nolog;
    ST *lt, *rt;
    ll l, r;

    /*
    
    v: best range product in log 10
    rv: full range product
    bsY: the value of Y (in base 10) that maximizes answer

    prod: best range product
    rprod: full range product
    ans: the answer for this range

    bsY_nolog: i think u can understand that

    */

    void combine() {
        if(lt->v + lt->bsY > lt->rv + rt->v + rt->bsY) { // answer is better on the left
            v = lt->v;
            prod = lt->prod;
            bsY = lt->bsY;
            ans = lt->ans;
            bsY_nolog = lt->bsY_nolog;
        } else {
            v = rt->v;
            prod = (lt->rprod * rt->prod) % MOD;
            bsY = rt->bsY;
            ans = (lt->rprod * rt->ans) % MOD;
            bsY_nolog = rt->bsY_nolog;
        }
        rv = lt->rv + rt->rv;
        rprod = (lt->rprod * rt->rprod) % MOD;
    }

    ST(int bl, int br, int X[], int Y[]) {
        lt = rt = nullptr;
        v = rv = 0;
        l = bl; r = br;
        prod = rprod = 0;
        bsY = -1;
        ans = -1;

        if(l == r) {
            v = rv = X[l]==1?0:log10(X[l]);
            prod = rprod = X[l];
            bsY = Y[l]==1?0:log10(Y[l]);
            bsY_nolog = Y[l];
            ans = (X[l] * Y[l]) % MOD;
        } else {
            m = (l+r)>>1;
            lt = new ST(l, m, X);
            rt = new ST(m+1, r, X);

            combine();
        }
    }

    ll qryAns() {
        return ans;
    }

    void updX(ll i, ll x) {
        if(i < l || r < i) return;
        if(l == r && r == i) {
            v = rv = x==1?0:log10(x);
            prod = rprod = x;
            ans = x * bsY_nolog;
            return;
        }

        lt->upd(i, x);
        rt->upd(i, x);
        combine();
    }

    void updY(ll i, ll y) {
        if(i < l || r < i) return;
        if(l == r && r == i) {
            bsY = y==1?0:log10(y);
            bsY_nolog = y;
            ans = prod * y;
            return;
        }

        lt->upd(i, y);
        rt->upd(i, y);
        combine();
    }
};

ST tree;

ll init(int N, int X[], int Y[]) {
    tree = ST(0, N-1, X, Y);

    return tree.qryAns();
}

ll updateX(int i, int v) {
    tree.updX(i, v);
    
    return tree.qryAns();
}

ll updateY(int i, int v) {
    tree.updY(i, v);

    return tree.qryAns();
}

Compilation message (stderr)

horses.cpp: In constructor 'ST::ST(int, int, int*, int*)':
horses.cpp:64:13: error: 'm' was not declared in this scope; did you mean 'tm'?
   64 |             m = (l+r)>>1;
      |             ^
      |             tm
horses.cpp: In member function 'void ST::updX(long long int, long long int)':
horses.cpp:85:13: error: 'struct ST' has no member named 'upd'; did you mean 'updX'?
   85 |         lt->upd(i, x);
      |             ^~~
      |             updX
horses.cpp:86:13: error: 'struct ST' has no member named 'upd'; did you mean 'updX'?
   86 |         rt->upd(i, x);
      |             ^~~
      |             updX
horses.cpp: In member function 'void ST::updY(long long int, long long int)':
horses.cpp:99:13: error: 'struct ST' has no member named 'upd'; did you mean 'updX'?
   99 |         lt->upd(i, y);
      |             ^~~
      |             updX
horses.cpp:100:13: error: 'struct ST' has no member named 'upd'; did you mean 'updX'?
  100 |         rt->upd(i, y);
      |             ^~~
      |             updX
horses.cpp: At global scope:
horses.cpp:105:4: error: no matching function for call to 'ST::ST()'
  105 | ST tree;
      |    ^~~~
horses.cpp:49:5: note: candidate: 'ST::ST(int, int, int*, int*)'
   49 |     ST(int bl, int br, int X[], int Y[]) {
      |     ^~
horses.cpp:49:5: note:   candidate expects 4 arguments, 0 provided
horses.cpp:8:8: note: candidate: 'constexpr ST::ST(const ST&)'
    8 | struct ST{
      |        ^~
horses.cpp:8:8: note:   candidate expects 1 argument, 0 provided
horses.cpp:8:8: note: candidate: 'constexpr ST::ST(ST&&)'
horses.cpp:8:8: note:   candidate expects 1 argument, 0 provided