Submission #252554

#TimeUsernameProblemLanguageResultExecution timeMemory
252554islingrNekameleoni (COCI15_nekameleoni)C++14
0 / 140
2119 ms421288 KiB
#include <iostream> #include <cassert> #define rep(i, a, b) for (auto i = (a); i < (b); ++i) #define f first #define s second using namespace std; using ll = long long; const int N = 1 << 17, K = 51, inf = 1e9; template<class T> bool ckmin(T& a, const T& b) { return a > b ? a = b, 1 : 0; } int U; struct S { int len, ans; pair<ll, int> pref[K], suff[K]; S() : len{0}, ans{inf} { } S(int p, int v) : len{1}, ans{U != 1 ? inf : 1} { pref[0] = suff[0] = {1ll << v, p}; } S(const S &l, const S &r) { len = 0; rep(i, 0, l.len) pref[len++] = l.pref[i]; rep(i, 0, r.len) if (len) { pref[len] = r.pref[i]; pref[len].f |= pref[len - 1].f; if (pref[len].f != pref[len - 1].f) ++len; } else pref[len++] = r.pref[i]; int tmp = len; len = 0; rep(i, 0, r.len) suff[len++] = r.suff[i]; rep(i, 0, l.len) { if (len) { suff[len] = l.suff[i]; suff[len].f |= suff[len - 1].f; if (suff[len].f != suff[len - 1].f) ++len; } else suff[len++] = l.suff[i]; } assert(tmp == len); assert(len < K); ans = inf; for (int s = l.len, p = 0; s--; ) { while (p < r.len && (l.suff[s].f | r.pref[p].f) != U) ++p; if (p < r.len && (l.suff[s].f | r.pref[p].f) == U) ckmin(ans, r.pref[p].s - l.suff[s].s + 1); } } }; int sz = 1; S t[N << 1]; int query() { return t[1].ans; } void update(int p, int v) { p += sz; for (t[p] = {p, v}; p >>= 1; ) t[p] = {t[p << 1], t[p << 1|1]}; } signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, k, q; cin >> n >> k >> q; U = (1ll << k) - 1; while (sz < n) sz <<= 1; assert(sz <= N); rep(i, 0, n) { int v; cin >> v; --v; update(i, v); } while (q--) { short t; cin >> t; --t; if (t) cout << (query() != inf ? query() : -1) << '\n'; else { int p, v; cin >> p >> v; --p; --v; update(p, v); } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...