제출 #362875

#제출 시각아이디문제언어결과실행 시간메모리
36287579brue최후의 만찬 (IOI12_supper)C++14
100 / 100
261 ms17880 KiB
#include <bits/stdc++.h> #include "advisor.h" using namespace std; typedef long long ll; struct dat{ int l, r, x; dat(){} dat(int l, int r, int x): l(l), r(r), x(x){} bool operator<(const dat &nxt)const{ if(r != nxt.r) return r<nxt.r; return x < nxt.x; } }; int n, k, m; int arr[100002]; vector<int> occurence[100002]; set<dat> st; set<int> now; vector<bool> bits; int loc[100002]; void ComputeAdvice(int *C, int N, int K, int M){ n = N, k = K, m = M; bits.resize(n+k); for(int i=0; i<n; i++){ arr[i] = C[i]; occurence[arr[i]].push_back(i); } for(int i=0; i<n; i++){ occurence[i].push_back(1e9); reverse(occurence[i].begin(), occurence[i].end()); } for(int i=0; i<k; i++){ now.insert(i); st.insert(dat(i, occurence[i].back(), i)); loc[i] = i; } for(int i=0; i<n; i++){ occurence[arr[i]].pop_back(); if(now.find(arr[i]) != now.end()){ auto it = st.find(dat(loc[i], i, arr[i])); // printf("to erase: %d %d %d\n", it->l, it->r, it->x); st.erase(st.find(dat(loc[i], i, arr[i]))); st.insert(dat(k+i, occurence[arr[i]].back(), arr[i])); loc[arr[i]] = k+i; continue; } // printf("content of st: "); // for(auto it = st.begin(); it != st.end(); ++it) printf("(%d %d %d) ", it->l, it->r, it->x); // puts(""); dat tmp = *st.rbegin(); st.erase(prev(st.end())); now.erase(tmp.x); bits[tmp.l] = true; st.insert(dat(k+i, occurence[arr[i]].back(), arr[i])); now.insert(arr[i]); loc[arr[i]] = k+i; } for(int i=0; i<n+k; i++){ WriteAdvice(bits[i]); } return; }
#include <bits/stdc++.h> #include "assistant.h" using namespace std; typedef long long ll; namespace { int n, k, r; bool arr[200002]; vector<int> order; set<int> st; stack<int> stk; } void Assist(unsigned char *A, int N, int K, int R){ n = N, k = K, r = R; assert(r = n+k); for(int i=0; i<r; i++) arr[i] = A[i]; for(int i=0; i<k; i++){ order.push_back(i); st.insert(i); if(arr[i]) stk.push(i); } for(int i=k; i<n+k; i++){ int tmp = GetRequest(); order.push_back(tmp); if(st.find(tmp) == st.end()){ int tmp2 = stk.top(); PutBack(tmp2); stk.pop(); st.erase(tmp2); st.insert(tmp); } if(arr[i]) stk.push(tmp); } return; }

컴파일 시 표준 에러 (stderr) 메시지

advisor.cpp: In function 'void ComputeAdvice(int*, int, int, int)':
advisor.cpp:48:18: warning: variable 'it' set but not used [-Wunused-but-set-variable]
   48 |             auto it = st.find(dat(loc[i], i, arr[i]));
      |                  ^~
#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...