记录编号 |
602362 |
评测结果 |
AAAAAAAAAAA |
题目名称 |
4162.兔子集团军 |
最终得分 |
100 |
用户昵称 |
对立猫猫对立 |
是否通过 |
通过 |
代码语言 |
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;
}