Submission #64637


ソースコード

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#include <bits/stdc++.h>
#define int int64_t
using namespace std;
//SegmentTree{{{
template< typename Monoid, typename F >
struct SegmentTree {
int sz;
vector< Monoid > seg;
const F f;
const Monoid M1;
SegmentTree(int n, const F f, const Monoid &M1) : f(f), M1(M1) {
sz = 1;
while(sz < n) sz <<= 1;
seg.assign(2 * sz, M1);
}
void set(int k, const Monoid &x) {
seg[k + sz] = x;
}
void build() {
for(int k = sz - 1; k > 0; k--) {
seg[k] = f(seg[2 * k + 0], seg[2 * k + 1]);
}
}
void update(int k, const Monoid &x) {
k += sz;
seg[k] = x;
while(k >>= 1) {
seg[k] = f(seg[2 * k + 0], seg[2 * k + 1]);
}
}
Monoid query(int a, int b) {
Monoid L = M1, R = M1;
for(a += sz, b += sz; a < b; a >>= 1, b >>= 1) {
if(a & 1) L = f(L, seg[a++]);
if(b & 1) R = f(seg[--b], R);
}
return f(L, R);
}
Monoid operator[](const int &k) const {
return seg[k + sz];
}
template< typename C >
int find_subtree(int a, const C &check, Monoid &M, bool type) {
while(a < sz) {
Monoid nxt = type ? f(seg[2 * a + type], M) : f(M, seg[2 * a + type]);
if(check(nxt)) a = 2 * a + type;
else M = nxt, a = 2 * a + 1 - type;
}
return a - sz;
}
template< typename C >
int find_first(int a, const C &check) {
Monoid L = M1;
if(a <= 0) {
if(check(f(L, seg[1]))) return find_subtree(1, check, L, false);
return -1;
}
int b = sz;
for(a += sz, b += sz; a < b; a >>= 1, b >>= 1) {
if(a & 1) {
Monoid nxt = f(L, seg[a]);
if(check(nxt)) return find_subtree(a, check, L, false);
L = nxt;
++a;
}
}
return -1;
}
template< typename C >
int find_last(int b, const C &check) {
Monoid R = M1;
if(b >= sz) {
if(check(f(seg[1], R))) return find_subtree(1, check, R, true);
return -1;
}
int a = sz;
for(b += sz; a < b; a >>= 1, b >>= 1) {
if(b & 1) {
Monoid nxt = f(seg[--b], R);
if(check(nxt)) return find_subtree(b, check, R, true);
R = nxt;
}
}
return -1;
}
};
template< typename Monoid, typename F >
SegmentTree< Monoid, F > get_segment_tree(int N, const F& f, const Monoid& M1) {
return {N, f, M1};
}
//}}}
signed main(){
/*
cin.tie(nullptr);
ios_base::sync_with_stdio(false);
*/
int h, w, n;
cin >> h >> w >> n;
vector<tuple<int, int, int> > point;
for(int i = 0; i < n; ++i){
int y, x, p;
cin >> y >> x >> p;
point.emplace_back(y-1, x-1, p);
}
sort(point.begin(), point.end());
auto rmq = get_segment_tree(w, [](auto a, auto b){ return max(a, b); }, 0LL);
for(auto [y, x, p] : point){
rmq.update(x, max<int>(rmq[x], rmq.query(0, x + 1) + p));
}
cout << rmq.query(0, w) << '\n';
return (0);
}

ステータス

項目 データ
問題 1436 - Simple Grid Problem
ユーザー名 ei1903
投稿日時 2020-11-07 15:43:06
言語 C++17
状態 Accepted
得点 6
ソースコード長 3015 Byte
最大実行時間 193 ms
最大メモリ使用量 11100 KB

セット

セット 得点 Cases
1 ALL 6 / 6 *

テストケース

ファイル名 状態 実行時間 メモリ使用量 #
in01.txt AC 139 ms 8012 KB
1
in02.txt AC 60 ms 2104 KB
1
in03.txt AC 96 ms 3732 KB
1
in04.txt AC 139 ms 8604 KB
1
in05.txt AC 33 ms 5132 KB
1
in06.txt AC 180 ms 10332 KB
1
in07.txt AC 182 ms 9992 KB
1
in08.txt AC 173 ms 10040 KB
1
in09.txt AC 193 ms 9612 KB
1
in10.txt AC 175 ms 9604 KB
1
in11.txt AC 180 ms 10884 KB
1
in12.txt AC 183 ms 9572 KB
1
in13.txt AC 152 ms 9620 KB
1
in14.txt AC 152 ms 10084 KB
1
in15.txt AC 31 ms 4700 KB
1
in16.txt AC 20 ms 4668 KB
1
in17.txt AC 24 ms 4764 KB
1
in18.txt AC 150 ms 7788 KB
1
in19.txt AC 141 ms 8024 KB
1
in20.txt AC 151 ms 7264 KB
1
in21.txt AC 149 ms 7572 KB
1
in22.txt AC 167 ms 9512 KB
1
in23.txt AC 185 ms 10396 KB
1
in24.txt AC 174 ms 10224 KB
1
in25.txt AC 178 ms 10896 KB
1
in26.txt AC 175 ms 9988 KB
1
in27.txt AC 169 ms 9396 KB
1
in28.txt AC 171 ms 10672 KB
1
in29.txt AC 180 ms 9624 KB
1
in30.txt AC 165 ms 9580 KB
1
in31.txt AC 53 ms 5620 KB
1
in32.txt AC 130 ms 7568 KB
1
in33.txt AC 139 ms 7908 KB
1
in34.txt AC 14 ms 628 KB
1
in35.txt AC 171 ms 10820 KB
1
in36.txt AC 189 ms 11100 KB
1
in37.txt AC 171 ms 9644 KB
1
in38.txt AC 21 ms 696 KB
1
in39.txt AC 19 ms 668 KB
1
in40.txt AC 21 ms 640 KB
1
in41.txt AC 172 ms 10440 KB
1
in42.txt AC 170 ms 9548 KB
1
sample01.txt AC 27 ms 724 KB
1
sample02.txt AC 21 ms 700 KB
1