记录编号 602362 评测结果 AAAAAAAAAAA
题目名称 4162.兔子集团军 最终得分 100
用户昵称 Gravatar对立猫猫对立 是否通过 通过
代码语言 C++ 运行时间 2.508 s
提交时间 2025-07-03 17:30:10 内存使用 23.35 MiB
显示代码纯文本
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1000010;
typedef long long ll;
int n, c[N], L[N], R[N], m, top, tot;
int f[N], v[N], ans = 1e19;
queue<int> q;
ll calc(int l, int r) {
    ll res = 0;
    for (int i = l; i <= r; i++)
        res += v[i] * f[i - l + 1] * f[i - l + 1];
    return res;
}
void solve(int l, int r) {
    int mid = (l + r) >> 1, i = mid, j = mid;
    while (q.size()) q.pop();
    q.push(c[mid]);
    bool flag = 0;
    while (q.size()) {
        int x = q.front(); q.pop();
        if (L[x] < l || r < R[x]) {
            flag = 1;
            break;
        } else {
            for (int k = i - 1; k >= L[x]; k--) q.push(c[k]);
            for (int k = j + 1; k <= R[x]; k++) q.push(c[k]);
            i = min(i, L[x]), j = max(j, R[x]);
        }
    }
    if (!flag) ans = min(ans, calc(i, j));
    if (l == r) return;
    else solve(l, mid), solve(mid + 1, r);
    return;
}
signed main() {
    freopen("RRR.in", "r", stdin);
    freopen("RRR.out", "w", stdout);
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> c[i];
    for (int i = 1; i <= n; i++) cin >> v[i];
    for (int i = 1; i <= n; i++) cin >> f[i];
    for (int i = 1; i <= n; i++) {
        if (!L[c[i]]) L[c[i]] = i;
        R[c[i]] = i;
    }
    solve(1, n);
    cout << ans << endl;
    return 0;
}