답안 #1038847

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1038847 2024-07-30T08:18:13 Z vjudge1 Nekameleoni (COCI15_nekameleoni) C++17
42 / 140
3000 ms 11256 KB
#include<bits/stdc++.h>

using namespace std;

const int N = 100'000 +10, K = 51, inf = 1'000'000'000;
int n, k, q, a[N], val[N];
set<int> st[K];
multiset<int> mi;

void process(int x)
{
  int ans = x;
  for(int i = 1; i <= k; i ++)
    if(i != a[x])
      ans = max(ans, *st[i].upper_bound(x));
  
  if(ans < *st[a[x]].upper_bound(x))
    ans = ans - x + 1;
  else
    ans = inf;
  auto it = mi.find(val[x]);
  if(it != mi.end())
    mi.erase(it);
  val[x] = ans;
  mi.insert(val[x]);
}


int main()
{
  ios::sync_with_stdio(false);
  cin.tie(0), cout.tie(0);
  
  cin >> n >> k >> q;
  for(int i = 1; i <= n; i++)
    cin >> a[i];
  
  for(int i = 1; i <= n; i ++)
    st[a[i]].insert(i);
  
  for(int i = 1; i <= k; i++)
    st[i].insert(inf);

  for(int i = 1; i <= n; i ++)
    process(i);
  
		    
  while(q--)
    {
      int t;
      cin >> t;
      if(t == 2)
	{
	  int ans = *mi.begin();
	  cout << (ans > n ? -1 : ans) << "\n";
	}
      else
	{
	  int p, x;
	  cin >> p >> x;

	  st[a[p]].erase(p);
	   a[p] = x;
	  st[a[p]].insert(p);
	  
	  for(int i = 1; i <= k; i ++)
	    {
	      auto it = st[i].upper_bound(p);
	      if(it != st[i].begin())
		{
		  it--;
		  process(*it);
		}
	      if(i == x && it != st[i].begin())
		{
		  it--;
		  process(*it);
		}
	    }
	}
    }
  return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 22 ms 600 KB Output is correct
2 Correct 10 ms 604 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 63 ms 860 KB Output is correct
2 Correct 60 ms 856 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 173 ms 960 KB Output is correct
2 Correct 180 ms 856 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2169 ms 2544 KB Output is correct
2 Execution timed out 3057 ms 7504 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 3059 ms 5972 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 3097 ms 4688 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 3053 ms 7012 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 3035 ms 6636 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 3051 ms 10576 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 3017 ms 11256 KB Time limit exceeded
2 Halted 0 ms 0 KB -