結果
| 問題 | No.2065 Sum of Min |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-10-30 17:48:39 |
| 言語 | C++23(gcc16) (gcc 16.2.0 + boost 1.92.0 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 492 ms / 2,000 ms |
| + 776µs | |
| コード長 | 1,097 bytes |
| 記録 | |
| コンパイル時間 | 3,077 ms |
| コンパイル使用メモリ | 370,732 KB |
| 実行使用メモリ | 42,156 KB |
| 最終ジャッジ日時 | 2026-10-30 17:48:55 |
| 合計ジャッジ時間 | 15,633 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge3_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 20 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using vi = vector<int>;
using vl = vector<long>;
#define rep(i, a, b) for(long i = (a); i < long(b); i++)
using ll = long long;
int main() {
int N, Q;
cin >> N >> Q;
vector<vector<int>>A(N+N);
vector<vector<ll>> S(N+N, {0});
rep(i,0,N){
int a;
cin >> a;
A[i+N].push_back(a);
S[i+N].push_back(a);
}
rep(j,0,N-1) {
int i = N - j - 1;
A[i].resize(A[i+i].size() + A[i+i+1].size());
std::merge(A[i+i].begin(),A[i+i].end(),A[i+i+1].begin(),A[i+i+1].end(),A[i].begin());
int n = A[i].size();
S[i].resize(n + 1);
rep(j, 0, n) S[i][j + 1] = S[i][j] + A[i][j];
}
while(Q--) {
ll L, R, X;
cin >> L >> R >> X;
L--;
L += N, R += N;
ll ans = 0;
while (L < R) {
if (L & 1) {
int n = lower_bound(A[L].begin(),A[L].end(),X) - A[L].begin();
ll s = S[L][n] + (A[L].size() - n) * X;
ans += s;
L++;
}
if (R & 1) {
R--;
int n = lower_bound(A[R].begin(),A[R].end(),X) - A[R].begin();
ll s = S[R][n] + (A[R].size() - n) * X;
ans += s;
}
L >>= 1, R >>= 1;
}
cout << ans << endl;
}
}