#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int N, K, Q;
const int INF = 1e9;
struct Node{
int ans;
vector<int> L, R;
Node(){}
Node(int _ans){ans = _ans; L.resize(55, INF); R.resize(55, -INF);}
};
Node f(Node &p, Node &q){
Node ret(min(p.ans, q.ans));
for(int i = 1; i <= K; i++){
ret.L[i] = min(p.L[i], q.L[i]);
ret.R[i] = max(p.R[i], q.R[i]);
}
vector<pair<int, int>> V;
for(int i = 1; i <= K; i++){
V.push_back({p.R[i], i});
}
sort(V.begin(), V.end());
int r = -1;
for(int i = 0; i < (int)V.size() - 1; i++){
if(q.L[V[i].second] == -INF) break;
r = max(r, q.L[V[i].second]);
ret.ans = min(ret.ans, r - V[i + 1].first + 1);
}
return ret;
}
Node T[400005];
void update(int n, int s, int e, int k, int v){
if(s == e){
T[n] = Node(K == 1 ? 1 : INF);
T[n].L[v] = T[n].R[v] = k;
return;
}
int m = (s + e) / 2;
if(k <= m) update(n * 2, s, m, k, v);
else update(n * 2 + 1, m + 1, e, k, v);
T[n] = f(T[n * 2], T[n * 2 + 1]);
}
int main(){
cin.tie(0) -> sync_with_stdio(false);
fill(T, T + 400005, Node(INF));
cin >> N >> K >> Q;
for(int i = 1; i <= N; i++){
int v; cin >> v;
update(1, 1, N, i, v);
}
while(Q--){
int op; cin >> op;
if(op == 1){
int k, v; cin >> k >> v;
update(1, 1, N, k, v);
} else {
cout << (T[1].ans > N ? -1 : T[1].ans) << '\n';
}
}
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
158 ms |
210136 KB |
Output is correct |
2 |
Correct |
155 ms |
210096 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
222 ms |
210124 KB |
Output is correct |
2 |
Correct |
236 ms |
210136 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
328 ms |
210140 KB |
Output is correct |
2 |
Correct |
346 ms |
210144 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1586 ms |
210716 KB |
Output is correct |
2 |
Execution timed out |
3039 ms |
210844 KB |
Time limit exceeded |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2991 ms |
210820 KB |
Output is correct |
2 |
Execution timed out |
3094 ms |
210588 KB |
Time limit exceeded |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
3069 ms |
210980 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
3085 ms |
210876 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
3079 ms |
211020 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
3096 ms |
210460 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
3089 ms |
210568 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |