#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using pll = pair < ll, ll >;
const ll N =2e5 + 2; 
ll T[4 * N];
vector < pll > pre[4 * N];
vector < pll > suf[4 * N];
ll a[N], k, n;
void Build(ll p, ll lo, ll hi) {
	T[p] = 1e18;
	if ( lo == hi) {
		T[p] = 1e18;
		if ( k == 1) T[p] = 1;
		pre[p].push_back(make_pair(lo, a[lo]));
		suf[p].push_back(make_pair(lo, a[lo]));
		return ;
	}
	ll i, mid = (lo + hi)/2;
	Build(2 * p, lo, mid);
	Build(2 * p + 1, mid + 1, hi);
	ll cnt[52] = {0};
	for (i =0 ; i < pre[2 *p].size(); i ++) {
		pre[p].push_back(pre[2 * p][i]);
		cnt[pre[2 * p][i].second] = 1;
	}
	for (i =0 ; i < pre[2 *p + 1].size(); i ++) {
		if ( cnt[pre[2 * p + 1][i].second] == 0) {
			pre[p].push_back(pre[2 * p + 1][i]);
		}
		cnt[pre[2 * p + 1][i].second] = 1;
	}
	for (i = 1; i <= k; i ++) cnt[i] = 0; 
	for (i =0 ; i < suf[2 *p + 1].size(); i ++) {
		suf[p].push_back(suf[2 * p + 1][i]);
		cnt[suf[2 * p + 1][i].second] = 1;
	}
	for (i =0 ; i < suf[2 *p].size(); i ++) {
		if ( cnt[suf[2 * p][i].second] == 0) {
			suf[p].push_back(suf[2 * p][i]);
		}
		cnt[suf[2 * p][i].second] = 1;
	}
	T[p] = min(T[2 *p], T[2 * p + 1]);
	ll Lo = lo;
	ll Hi =hi,cnt1 = 0;
	if ( pre[p].size() == k) {
		lo = 0;
		hi = pre[2 * p + 1].size() - 1;
		for (i = 1; i <= k; i ++) cnt[i] = 0;
		for (i = 0; i < pre[2 * p + 1].size(); i ++) {
			cnt[pre[2 * p + 1][i].second] ++;
			if ( cnt[pre[2 * p + 1][i].second] == 1) cnt1++;
		}
		while ( lo < suf[2 * p].size() && cnt1 < k) {
			cnt[suf[2 * p][lo].second] ++;
			if ( cnt[suf[2 * p][lo].second] == 1) cnt1 ++;
			lo ++;
		}
		if ( lo > 0) {
			lo --;
			cnt[suf[2 * p][lo].second] --;
		}
		while ( lo < suf[2 * p].size()) {
			cnt[suf[2 * p][lo].second] ++;
			while ( hi >= 0 && cnt[pre[2 * p + 1][hi].second] > 1) {
				cnt[pre[2 * p + 1][hi].second] --;
				hi --;
			}
			if ( hi >= 0 ) {
	//			cout << pre[2 * p + 1][hi].first << " " << suf[2 * p][lo].first << endl;
				T[p] = min(T[p], pre[2 * p + 1][hi].first - suf[2 * p][lo ].first + 1);
			}
			lo ++;
		}
	}
	
//	cout << p << " " << Lo << " "<< Hi << "R " << T[p] << endl;
	return ;
}
void Update(ll p, ll lo, ll hi, ll x, ll y)  {
	T[p] = 1e18;
	pre[p].clear();
	suf[p].clear();
	if ( lo == hi) {
		T[p] = 1e18;
		a[lo] = y;
		if ( k == 1) T[p] = 1;
		pre[p].push_back(make_pair(lo, a[lo]));
		suf[p].push_back(make_pair(lo, a[lo]));
		return ;
	}
	ll i, mid = (lo + hi)/2;
	if ( x <= mid) Update(2 * p, lo, mid, x, y);
	else Update(2 * p + 1, mid + 1, hi, x, y);
	ll cnt[52] = {0};
	for (i =0 ; i < pre[2 *p].size(); i ++) {
		pre[p].push_back(pre[2 * p][i]);
		cnt[pre[2 * p][i].second] = 1;
	}
	for (i =0 ; i < pre[2 *p + 1].size(); i ++) {
		if ( cnt[pre[2 * p + 1][i].second] == 0) {
			pre[p].push_back(pre[2 * p + 1][i]);
		}
		cnt[pre[2 * p + 1][i].second] = 1;
	}
	for (i = 1; i <= k; i ++) cnt[i] = 0; 
	for (i =0 ; i < suf[2 *p + 1].size(); i ++) {
		suf[p].push_back(suf[2 * p + 1][i]);
		cnt[suf[2 * p + 1][i].second] = 1;
	}
	for (i =0 ; i < suf[2 *p].size(); i ++) {
		if ( cnt[suf[2 * p][i].second] == 0) {
			suf[p].push_back(suf[2 * p][i]);
		}
		cnt[suf[2 * p][i].second] = 1;
	}
	T[p] = min(T[2 *p], T[2 * p + 1]);
	ll Lo = lo;
	ll Hi =hi,cnt1 = 0;
	if ( pre[p].size() == k) {
		lo = 0;
		hi = pre[2 * p + 1].size() - 1;
		for (i = 1; i <= k; i ++) cnt[i] = 0;
		for (i = 0; i < pre[2 * p + 1].size(); i ++) {
			cnt[pre[2 * p + 1][i].second] ++;
			if ( cnt[pre[2 * p + 1][i].second] == 1) cnt1++;
		}
		while ( lo < suf[2 * p].size() && cnt1 < k) {
			cnt[suf[2 * p][lo].second] ++;
			if ( cnt[suf[2 * p][lo].second] == 1) cnt1 ++;
			lo ++;
		}
		if ( lo > 0) {
			lo --;
			cnt[suf[2 * p][lo].second] --;
		}
		while ( lo < suf[2 * p].size()) {
			cnt[suf[2 * p][lo].second] ++;
			while ( hi >= 0 && cnt[pre[2 * p + 1][hi].second] > 1) {
				cnt[pre[2 * p + 1][hi].second] --;
				hi --;
			}
			if ( hi >= 0 ) {
			//	cout << pre[2 * p + 1][hi].first << " " << suf[2 * p][lo].first << endl;
				T[p] = min(T[p], pre[2 * p + 1][hi].first - suf[2 * p][lo ].first + 1);
			}
			lo ++;
		}
	}
	return ;
}
int main() {
	ll q, i, j, x, y;
	
	cin >> n >> k >> q;
	
	for (i = 1; i <= n; i ++) {
		cin >> a[i];	
	}	
	Build(1, 1, n);
	
	while (q --) {
		cin >> x;
		if ( x == 2) {
			if ( T[1] > n) cout << -1 << endl;
			else cout<< T[1] << endl;
		}
		else {
			cin >> x >> y;
			Update(1, 1, n, x, y);
		}
	}
	
	
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |