Submission #67786645
Source Code Expand
#include <iostream>
#include <algorithm>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <numeric>
#include <bitset>
#include <cmath>
#include <limits>
#include <array>
static const int MOD = 998244353;
using ll = long long;
using uint = unsigned;
using ull = unsigned long long;
using namespace std;
template<class T> constexpr T INF = ::numeric_limits<T>::max() / 32 * 15 + 208;
void solve(){
int n;
cin >> n;
vector<int> A(n);
for (auto &&i : A) scanf("%d", &i);
vector<pair<int, int>> rle;
rle.emplace_back(A[0], 1);
for (int i = 1; i < n; ++i) {
if(A[i] == rle.back().first){
rle.back().second++;
}else {
rle.emplace_back(A[i], 1);
}
}
int m = rle.size();
vector<int> L(m), R(m);
for (int i = 0; i < m; ++i) {
L[i] = i-1;
R[i] = (i+1 < m ? i+1 : -1);
}
vector<int> ord(m);
iota(ord.begin(), ord.end(), 0);
sort(ord.begin(), ord.end(), [&](int i, int j) {
return rle[i].first < rle[j].first;
});
ll ans = 0;
for (auto &&x: ord) {
if(rle[x].second == 0) continue;
int lval = (L[x] >= 0 ? rle[L[x]].first : -1);
int rval = (R[x] >= 0 ? rle[R[x]].first : -1);
int lx = L[x], rx = R[x];
int val = (lval == -1 ? rval : (rval == -1 ? lval : min(lval, rval)));
if(val == -1) continue;
while(rle[x].first < val){
if(rle[x].second != 1){
if(rle[x].second&1){
ans++;
rle[x].second++;
}
rle[x].second /= 2;
rle[x].first++;
}else {
ans += val - rle[x].first;
rle[x].first = val;
}
}
if(lval == rval){
int k = rle[R[x]].second + rle[x].second + rle[L[x]].second;
rle[lx].second = k;
R[lx] = R[rx];
if(R[rx] >= 0) L[R[rx]] = lx;
rle[x].second = 0; L[x] = R[x] = -1;
rle[rx].second = 0; L[rx] = R[rx] = -1;
}else if(val == lval){
rle[lx].second += rle[x].second;
rle[x].second = 0;
R[lx] = R[x];
if(R[x] >= 0) L[R[x]] = lx;
}else if(val == rval) {
rle[rx].second += rle[x].second;
rle[x].second = 0;
L[rx] = L[x];
if(L[x] >= 0) R[L[x]] = rx;
}
}
for (int i = 0; i < m; ++i) {
while(rle[i].second > 1){
if(rle[i].second & 1){
ans++;
rle[i].second++;
}
rle[i].second /= 2;
rle[i].first++;
}
}
cout << ans << "\n";
}
int main() {
int t;
cin >> t;
while(t--) solve();
return 0;
}
Submission Info
| Submission Time | |
|---|---|
| Task | A - Merge and Increment |
| User | firiexp |
| Language | C++ 20 (gcc 12.2) |
| Score | 700 |
| Code Size | 2904 Byte |
| Status | AC |
| Exec Time | 155 ms |
| Memory | 8100 KiB |
Compile Error
Main.cpp: In function ‘void solve()’:
Main.cpp:25:29: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
25 | for (auto &&i : A) scanf("%d", &i);
| ~~~~~^~~~~~~~~~
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 700 / 700 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | 00_sample_00.txt |
| All | 00_sample_00.txt, 01_small_00.txt, 01_small_01.txt, 01_small_02.txt, 01_small_03.txt, 01_small_04.txt, 01_small_05.txt, 01_small_06.txt, 01_small_07.txt, 01_small_08.txt, 01_small_09.txt, 01_small_10.txt, 01_small_11.txt, 01_small_12.txt, 01_small_13.txt, 01_small_14.txt, 02_random_00.txt, 02_random_01.txt, 02_random_02.txt, 02_random_03.txt, 02_random_04.txt, 02_random_05.txt, 02_random_06.txt, 02_random_07.txt, 02_random_08.txt, 02_random_09.txt, 03_sorted_00.txt, 03_sorted_01.txt, 03_sorted_02.txt, 03_sorted_03.txt, 03_sorted_04.txt, 03_sorted_05.txt, 04_almost_sorted_00.txt, 04_almost_sorted_01.txt, 04_almost_sorted_02.txt, 04_almost_sorted_03.txt, 04_almost_sorted_04.txt, 04_almost_sorted_05.txt, 05_same_00.txt, 05_same_01.txt, 05_same_02.txt, 06_corner_00.txt, 06_corner_01.txt, 06_corner_02.txt, 07_hack_1_00.txt, 07_hack_1_01.txt, 07_hack_1_02.txt, 07_hack_1_03.txt, 07_hack_1_04.txt, 08_hack_2_00.txt, 08_hack_2_01.txt, 08_hack_2_02.txt, 08_hack_2_03.txt, 08_hack_2_04.txt, 09_hack_3_00.txt, 09_hack_3_01.txt, 09_hack_3_02.txt, 09_hack_3_03.txt, 09_hack_3_04.txt, 09_hack_3_05.txt, 09_hack_3_06.txt, 09_hack_3_07.txt, 09_hack_3_08.txt, 09_hack_3_09.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 00_sample_00.txt | AC | 1 ms | 3568 KiB |
| 01_small_00.txt | AC | 69 ms | 3620 KiB |
| 01_small_01.txt | AC | 69 ms | 3684 KiB |
| 01_small_02.txt | AC | 49 ms | 3676 KiB |
| 01_small_03.txt | AC | 155 ms | 3676 KiB |
| 01_small_04.txt | AC | 115 ms | 3616 KiB |
| 01_small_05.txt | AC | 93 ms | 3700 KiB |
| 01_small_06.txt | AC | 81 ms | 3616 KiB |
| 01_small_07.txt | AC | 57 ms | 3684 KiB |
| 01_small_08.txt | AC | 44 ms | 3692 KiB |
| 01_small_09.txt | AC | 137 ms | 3868 KiB |
| 01_small_10.txt | AC | 98 ms | 3688 KiB |
| 01_small_11.txt | AC | 78 ms | 3656 KiB |
| 01_small_12.txt | AC | 67 ms | 3868 KiB |
| 01_small_13.txt | AC | 45 ms | 3684 KiB |
| 01_small_14.txt | AC | 33 ms | 3496 KiB |
| 02_random_00.txt | AC | 40 ms | 7368 KiB |
| 02_random_01.txt | AC | 45 ms | 8004 KiB |
| 02_random_02.txt | AC | 38 ms | 7340 KiB |
| 02_random_03.txt | AC | 45 ms | 7996 KiB |
| 02_random_04.txt | AC | 44 ms | 7756 KiB |
| 02_random_05.txt | AC | 45 ms | 8052 KiB |
| 02_random_06.txt | AC | 27 ms | 6000 KiB |
| 02_random_07.txt | AC | 45 ms | 7936 KiB |
| 02_random_08.txt | AC | 27 ms | 6136 KiB |
| 02_random_09.txt | AC | 46 ms | 7980 KiB |
| 03_sorted_00.txt | AC | 24 ms | 8004 KiB |
| 03_sorted_01.txt | AC | 23 ms | 8100 KiB |
| 03_sorted_02.txt | AC | 23 ms | 7984 KiB |
| 03_sorted_03.txt | AC | 24 ms | 7976 KiB |
| 03_sorted_04.txt | AC | 23 ms | 8000 KiB |
| 03_sorted_05.txt | AC | 23 ms | 8028 KiB |
| 04_almost_sorted_00.txt | AC | 24 ms | 7964 KiB |
| 04_almost_sorted_01.txt | AC | 23 ms | 7980 KiB |
| 04_almost_sorted_02.txt | AC | 23 ms | 7860 KiB |
| 04_almost_sorted_03.txt | AC | 24 ms | 8056 KiB |
| 04_almost_sorted_04.txt | AC | 24 ms | 8096 KiB |
| 04_almost_sorted_05.txt | AC | 24 ms | 8000 KiB |
| 05_same_00.txt | AC | 11 ms | 3860 KiB |
| 05_same_01.txt | AC | 16 ms | 3976 KiB |
| 05_same_02.txt | AC | 15 ms | 4052 KiB |
| 06_corner_00.txt | AC | 18 ms | 7984 KiB |
| 06_corner_01.txt | AC | 38 ms | 8012 KiB |
| 06_corner_02.txt | AC | 24 ms | 7996 KiB |
| 07_hack_1_00.txt | AC | 15 ms | 3956 KiB |
| 07_hack_1_01.txt | AC | 15 ms | 3956 KiB |
| 07_hack_1_02.txt | AC | 15 ms | 3856 KiB |
| 07_hack_1_03.txt | AC | 15 ms | 3920 KiB |
| 07_hack_1_04.txt | AC | 15 ms | 3924 KiB |
| 08_hack_2_00.txt | AC | 23 ms | 6960 KiB |
| 08_hack_2_01.txt | AC | 22 ms | 7040 KiB |
| 08_hack_2_02.txt | AC | 23 ms | 6960 KiB |
| 08_hack_2_03.txt | AC | 23 ms | 6940 KiB |
| 08_hack_2_04.txt | AC | 22 ms | 6972 KiB |
| 09_hack_3_00.txt | AC | 10 ms | 4052 KiB |
| 09_hack_3_01.txt | AC | 10 ms | 3856 KiB |
| 09_hack_3_02.txt | AC | 22 ms | 7496 KiB |
| 09_hack_3_03.txt | AC | 21 ms | 7484 KiB |
| 09_hack_3_04.txt | AC | 28 ms | 7860 KiB |
| 09_hack_3_05.txt | AC | 28 ms | 7860 KiB |
| 09_hack_3_06.txt | AC | 32 ms | 7984 KiB |
| 09_hack_3_07.txt | AC | 31 ms | 7992 KiB |
| 09_hack_3_08.txt | AC | 36 ms | 8100 KiB |
| 09_hack_3_09.txt | AC | 37 ms | 7868 KiB |