提出 #50848281
ソースコード 拡げる
#include <bits/stdc++.h>
#include <atcoder/modint>
#include <atcoder/segtree>
namespace {
using ModInt [[maybe_unused]] = atcoder::modint998244353;
using Num [[maybe_unused]] = long long int;
using Vec [[maybe_unused]] = std::vector<Num>;
using Set [[maybe_unused]] = std::set<Num>;
using Mset [[maybe_unused]] = std::multiset<Num>;
using Edges [[maybe_unused]] = std::vector<std::vector<Num>>;
template<typename T>
using Q [[maybe_unused]] = std::queue<T>;
template<typename T>
using PQ [[maybe_unused]] = std::priority_queue<T, std::vector<T>, std::greater<T>>;
}
void ins(std::set<std::pair<Num, Num>>& s, Num v, Num ct) {
auto it = s.lower_bound(std::make_pair(v,-1));
if (it == s.end()) {
s.insert(std::make_pair(v,ct));
} else if (it->first != v) {
s.insert(std::make_pair(v,ct));
} else {
Num c = it->second + ct;
s.erase(it);
if (c != 0) {
s.insert(std::make_pair(v,c));
}
}
}
struct Node {
std::array<std::pair<Num, Num>, 2> elements {{{0, 0}, {0, 0}}};
Node(void) = default;
explicit Node(Num d) {
elements.at(0).first = d;
elements.at(0).second = 1;
}
Node merge(const Node& rhs) const {
std::set<std::pair<Num, Num>> s;
ins(s, elements.at(0).first, elements.at(0).second);
ins(s, elements.at(1).first, elements.at(1).second);
ins(s, rhs.elements.at(0).first, rhs.elements.at(0).second);
ins(s, rhs.elements.at(1).first, rhs.elements.at(1).second);
Node result;
Num idx = 0;
for(auto it = s.rbegin(); (idx < 2) && (it != s.rend()); ++it) {
result.elements.at(idx).first = it->first;
result.elements.at(idx).second = it->second;
++idx;
};
return result;
}
};
Node apply(const Node& a, const Node& b) {
return a.merge(b);
}
Node unit() {
return Node();
}
void solve(std::istream& is, std::ostream& os) {
Num n, q;
is >> n >> q;
atcoder::segtree<Node, apply, unit> tree(n);
for(Num i{0}; i<n; ++i) {
Num a;
is >> a;
tree.set(i, Node(a));
}
while(q-- > 0) {
Num cmd, a, b;
is >> cmd >> a >> b;
if (cmd == 1) {
--a;
tree.set(a, Node(b));
} else {
auto ll = a - 1;
auto rr = b;
auto result = tree.prod(ll, rr);
if (result.elements.at(1).first <= 0) {
os << "0\n";
} else {
os << result.elements.at(1).second << "\n";
}
}
}
}
int main(void) {
solve(std::cin, std::cout);
return 0;
}
提出情報
| 提出日時 | |
|---|---|
| 問題 | F - Second Largest Query |
| ユーザ | zettsut |
| 言語 | C++ 20 (gcc 12.2) |
| 得点 | 525 |
| コード長 | 2820 Byte |
| 結果 | AC |
| 実行時間 | 1161 ms |
| メモリ | 25988 KiB |
ジャッジ結果
| セット名 | Sample | All | ||||
|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 525 / 525 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| 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 |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| sample00.txt | AC | 1 ms | 3468 KiB |
| sample01.txt | AC | 1 ms | 3464 KiB |
| sample02.txt | AC | 1 ms | 3592 KiB |
| testcase00.txt | AC | 1122 ms | 25816 KiB |
| testcase01.txt | AC | 1146 ms | 25744 KiB |
| testcase02.txt | AC | 1061 ms | 25020 KiB |
| testcase03.txt | AC | 1156 ms | 25820 KiB |
| testcase04.txt | AC | 917 ms | 25720 KiB |
| testcase05.txt | AC | 947 ms | 25772 KiB |
| testcase06.txt | AC | 1067 ms | 25296 KiB |
| testcase07.txt | AC | 1142 ms | 25820 KiB |
| testcase08.txt | AC | 1115 ms | 25236 KiB |
| testcase09.txt | AC | 1149 ms | 25988 KiB |
| testcase10.txt | AC | 959 ms | 25544 KiB |
| testcase11.txt | AC | 956 ms | 25824 KiB |
| testcase12.txt | AC | 1054 ms | 25364 KiB |
| testcase13.txt | AC | 1150 ms | 25780 KiB |
| testcase14.txt | AC | 1085 ms | 25568 KiB |
| testcase15.txt | AC | 1148 ms | 25776 KiB |
| testcase16.txt | AC | 986 ms | 25480 KiB |
| testcase17.txt | AC | 957 ms | 25824 KiB |
| testcase18.txt | AC | 961 ms | 25496 KiB |
| testcase19.txt | AC | 981 ms | 25772 KiB |
| testcase20.txt | AC | 1030 ms | 24952 KiB |
| testcase21.txt | AC | 1114 ms | 25820 KiB |
| testcase22.txt | AC | 1073 ms | 25220 KiB |
| testcase23.txt | AC | 1123 ms | 25816 KiB |
| testcase24.txt | AC | 1062 ms | 25292 KiB |
| testcase25.txt | AC | 1124 ms | 25820 KiB |
| testcase26.txt | AC | 1052 ms | 25216 KiB |
| testcase27.txt | AC | 1161 ms | 25832 KiB |
| testcase28.txt | AC | 1072 ms | 25240 KiB |
| testcase29.txt | AC | 1132 ms | 25820 KiB |
| testcase30.txt | AC | 1092 ms | 25220 KiB |
| testcase31.txt | AC | 1145 ms | 25816 KiB |
| testcase32.txt | AC | 1135 ms | 25564 KiB |
| testcase33.txt | AC | 1144 ms | 25976 KiB |
| testcase34.txt | AC | 1136 ms | 25808 KiB |
| testcase35.txt | AC | 1148 ms | 25812 KiB |
| testcase36.txt | AC | 1105 ms | 25224 KiB |
| testcase37.txt | AC | 1155 ms | 25828 KiB |
| testcase38.txt | AC | 1118 ms | 25776 KiB |
| testcase39.txt | AC | 1153 ms | 25816 KiB |
| testcase40.txt | AC | 1116 ms | 25332 KiB |
| testcase41.txt | AC | 1149 ms | 25836 KiB |
| testcase42.txt | AC | 1080 ms | 25480 KiB |
| testcase43.txt | AC | 1147 ms | 25744 KiB |