제출 #819778

#제출 시각아이디문제언어결과실행 시간메모리
819778josanneo22말 (IOI15_horses)C++17
100 / 100
301 ms91288 KiB
#include "horses.h"
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
const ll N = 5e5 + 500, mod = 1e9 + 7;
ll chen(ll x, ll y) { return ((x % mod) * (y % mod)) % mod; }
ll jia(ll x, ll y) { return ((x % mod) + (y % mod)) % mod; }
ll a[N], b[N];
struct yl {
    ll l, r, pro, ans;
    ld sumlog, mx;
}tr[N << 2];
void pushup(ll p) {
    ll l = p << 1, r = p << 1 | 1;
    tr[p].sumlog = tr[l].sumlog + tr[r].sumlog;
    tr[p].pro = chen(tr[l].pro, tr[r].pro);
    if (tr[l].mx < tr[l].sumlog + tr[r].mx) {
        tr[p].mx = tr[l].sumlog + tr[r].mx;
        tr[p].ans = chen(tr[l].pro, tr[r].ans);
    }
    else {
        tr[p].mx = tr[l].mx;
        tr[p].ans = tr[l].ans;
    }
    return;
}
void build(ll p, ll l, ll r) {
    tr[p].l = l; tr[p].r = r;
    if (l == r) {
        tr[p].ans = chen(a[l], b[l]);
        tr[p].pro = a[l] % mod;
        tr[p].sumlog = log(a[l]);
        tr[p].mx = log(a[l] * b[l]);
        return;
    }
    ll mid = (l + r) >> 1;
    build(p << 1, l, mid); build(p << 1 | 1, mid + 1, r);
    pushup(p);
    return;
}
void modify(ll p, ll l) {
    if (tr[p].l == tr[p].r) {
        tr[p].ans = chen(a[l], b[l]);
        tr[p].pro = a[l] % mod;
        tr[p].sumlog = log(a[l]);
        tr[p].mx = log(a[l] * b[l]);
        return;
    }
    ll mid = (tr[p].l + tr[p].r) >> 1;
    if (l <= mid) modify(p << 1, l);
    if (l > mid) modify(p << 1 | 1, l);
    pushup(p);
    return;
}

int init(int n, int X[], int Y[]) {
    for (int i = 1; i <= n; i++) a[i] = X[i - 1];
    for (int i = 1; i <= n; i++) b[i] = Y[i - 1];
    build(1, 1, n);
    return (int)tr[1].ans;
}
int updateX(int pos, int val) {
    pos++;
    a[pos] = (ll)val; modify(1, pos);
    return (int)tr[1].ans;
}
int updateY(int pos, int val) {
    pos++;
    b[pos] = (ll)val; modify(1, pos);
    return (int)tr[1].ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...