Submission #50801097
Source Code Expand
/**
* @the_hyp0cr1t3
* 02.03.2024 17:45
**/
#include <bits/stdc++.h>
template <typename Info>
class Segtree {
int n;
std::vector<Info> info;
Info query(int p, int l, int r, int ql, int qr) {
if (ql <= l and r <= qr)
return info[p];
int m = (l + r) / 2;
return qr <= m ? query(2 * p, l, m, ql, qr)
: ql >= m ? query(2 * p + 1, m, r, ql, qr)
: query(2 * p, l, m, ql, m) + query(2 * p + 1, m, r, m, qr);
}
void update(int p, int l, int r, int i, const auto &v) {
if (r - l == 1) {
info[p].apply(v);
return;
}
int m = (l + r) / 2;
i < m ? update(2 * p, l, m, i, v) : update(2 * p + 1, m, r, i, v);
info[p] = info[2 * p] + info[2 * p + 1];
}
public:
Segtree() : n(0) {}
Segtree(int _n, Info _v = {}) : Segtree(std::vector(_n, _v)) {}
template <std::convertible_to<Info> U>
Segtree(const std::vector<U> &a) : n(a.size()) {
assert(n > 0);
int cap = ((1 + !!(n & (n - 1))) << std::__lg(2 * n)) + 1;
info.resize(cap);
auto build = [&](auto &&self, int p, int l, int r) -> void {
if (r - l == 1) {
info[p] = a[l];
return;
}
int m = (l + r) / 2;
self(self, 2 * p, l, m);
self(self, 2 * p + 1, m, r);
info[p] = info[2 * p] + info[2 * p + 1];
};
build(build, 1, 0, n);
}
Info query(int l, int r) {
return query(1, 0, n, l, r);
}
void update(int p, auto v) {
return update(1, 0, n, p, v);
}
};
struct Info {
std::array<int, 2> a, b;
Info(int _a = -1, int _b = -1) : a({_a, 0}), b({_b, 0}) {
if (~_a) a[1] = 1;
if (~_b) b[1] = 1;
}
void apply(auto t) {
a = {t, 1};
}
};
Info operator+(Info l, Info r) {
std::array<std::array<int, 2>, 4> x;
x[0] = l.a;
x[1] = l.b;
x[2] = r.a;
x[3] = r.b;
std::ranges::sort(x, std::greater{});
Info res;
res.a = x[0];
int i = 1;
if (x[1][0] == x[0][0])
res.a[1] += x[1][1], ++i;
res.b = x[i];
if (x[i + 1][0] == res.b[0])
res.b[1] += x[i + 1][1];
return res;
}
int main() {
std::cin.tie(nullptr)->sync_with_stdio(false);
int n, q;
std::cin >> n >> q;
std::vector<int> a(n);
for (auto &x : a)
std::cin >> x;
Segtree<Info> st(a);
while (q--) {
int t;
std::cin >> t;
if (t == 1) {
int p, x;
std::cin >> p >> x;
st.update(--p, x);
} else {
int l, r;
std::cin >> l >> r;
std::cout << st.query(--l, r).b[1] << '\n';
}
}
}
Submission Info
| Submission Time |
|
| Task |
F - Second Largest Query |
| User |
the_hyp0cr1t3 |
| Language |
C++ 20 (gcc 12.2) |
| Score |
525 |
| Code Size |
2915 Byte |
| Status |
AC |
| Exec Time |
164 ms |
| Memory |
12124 KiB |
Judge Result
| Set Name |
Sample |
All |
| Score / Max Score |
0 / 0 |
525 / 525 |
| Status |
|
|
| Set Name |
Test Cases |
| Sample |
sample00.txt, sample01.txt, sample02.txt |
| All |
sample00.txt, sample01.txt, sample02.txt, testcase00.txt, testcase01.txt, testcase02.txt, testcase03.txt, testcase04.txt, testcase05.txt, testcase06.txt, testcase07.txt, testcase08.txt, testcase09.txt, testcase10.txt, testcase11.txt, testcase12.txt, testcase13.txt, testcase14.txt, testcase15.txt, testcase16.txt, testcase17.txt, testcase18.txt, testcase19.txt, testcase20.txt, testcase21.txt, testcase22.txt, testcase23.txt, testcase24.txt, testcase25.txt, testcase26.txt, testcase27.txt, testcase28.txt, testcase29.txt, testcase30.txt, testcase31.txt, testcase32.txt, testcase33.txt, testcase34.txt, testcase35.txt, testcase36.txt, testcase37.txt, testcase38.txt, testcase39.txt, testcase40.txt, testcase41.txt, testcase42.txt, testcase43.txt |
| Case Name |
Status |
Exec Time |
Memory |
| sample00.txt |
AC |
1 ms |
3440 KiB |
| sample01.txt |
AC |
1 ms |
3476 KiB |
| sample02.txt |
AC |
1 ms |
3432 KiB |
| testcase00.txt |
AC |
148 ms |
12000 KiB |
| testcase01.txt |
AC |
153 ms |
11896 KiB |
| testcase02.txt |
AC |
144 ms |
12052 KiB |
| testcase03.txt |
AC |
154 ms |
11976 KiB |
| testcase04.txt |
AC |
74 ms |
12032 KiB |
| testcase05.txt |
AC |
80 ms |
11988 KiB |
| testcase06.txt |
AC |
144 ms |
12008 KiB |
| testcase07.txt |
AC |
153 ms |
11992 KiB |
| testcase08.txt |
AC |
153 ms |
12036 KiB |
| testcase09.txt |
AC |
158 ms |
12060 KiB |
| testcase10.txt |
AC |
74 ms |
12056 KiB |
| testcase11.txt |
AC |
81 ms |
12052 KiB |
| testcase12.txt |
AC |
145 ms |
11988 KiB |
| testcase13.txt |
AC |
154 ms |
11972 KiB |
| testcase14.txt |
AC |
147 ms |
12040 KiB |
| testcase15.txt |
AC |
154 ms |
11984 KiB |
| testcase16.txt |
AC |
78 ms |
12032 KiB |
| testcase17.txt |
AC |
81 ms |
11984 KiB |
| testcase18.txt |
AC |
123 ms |
12124 KiB |
| testcase19.txt |
AC |
126 ms |
11964 KiB |
| testcase20.txt |
AC |
141 ms |
12016 KiB |
| testcase21.txt |
AC |
146 ms |
11988 KiB |
| testcase22.txt |
AC |
145 ms |
12068 KiB |
| testcase23.txt |
AC |
157 ms |
11968 KiB |
| testcase24.txt |
AC |
145 ms |
11996 KiB |
| testcase25.txt |
AC |
160 ms |
11932 KiB |
| testcase26.txt |
AC |
151 ms |
12036 KiB |
| testcase27.txt |
AC |
155 ms |
12016 KiB |
| testcase28.txt |
AC |
153 ms |
11984 KiB |
| testcase29.txt |
AC |
160 ms |
11988 KiB |
| testcase30.txt |
AC |
158 ms |
12124 KiB |
| testcase31.txt |
AC |
164 ms |
11980 KiB |
| testcase32.txt |
AC |
161 ms |
12056 KiB |
| testcase33.txt |
AC |
161 ms |
11980 KiB |
| testcase34.txt |
AC |
158 ms |
12040 KiB |
| testcase35.txt |
AC |
160 ms |
12040 KiB |
| testcase36.txt |
AC |
152 ms |
12032 KiB |
| testcase37.txt |
AC |
157 ms |
12116 KiB |
| testcase38.txt |
AC |
149 ms |
12016 KiB |
| testcase39.txt |
AC |
155 ms |
12044 KiB |
| testcase40.txt |
AC |
150 ms |
11988 KiB |
| testcase41.txt |
AC |
158 ms |
12064 KiB |
| testcase42.txt |
AC |
145 ms |
12020 KiB |
| testcase43.txt |
AC |
152 ms |
11980 KiB |