제출 #363103

#제출 시각아이디문제언어결과실행 시간메모리
363103casperwang최후의 만찬 (IOI12_supper)C++14
0 / 100
408 ms21824 KiB
#include <bits/stdc++.h> #include "advisor.h" #define pb emplace_back #define pii pair<int,int> #define ff first #define ss second using namespace std; #define debug(args...) kout("[ " + string(#args) + " ]", args) void kout() { cerr << endl; } template <class T, class ...U> void kout(T a, U ...b) { cerr << a << ' ',kout(b...); } template <class T> void pary(T L, T R) { while (L != R) cerr << *L << " \n"[++L==R]; } const int MAXN = 100000; int P; vector <int> nxt[MAXN+1]; vector <int> cur; vector <int> pos; vector <int> id; set <int> appr; class Seg { private: pii arr[MAXN*4+5]; void pull(int now) { arr[now] = max(arr[now*2], arr[now*2+1]); } public: void build(int now, int l, int r) { if (l == r) { arr[now] = pii(*nxt[l].begin(), l); return; } int mid = l + r >> 1; build(now*2 , l, mid); build(now*2+1,mid+1,r); pull(now); return; } void mdy(int p, int id, int now, int l, int r) { if (l == p && r == p) { arr[now] = pii(nxt[id][cur[id]], l); return; } else if (l > p || r < p) return; int mid = l + r >> 1; mdy(p, id, now*2 , l, mid); mdy(p, id, now*2+1,mid+1,r); pull(now); return; } pii qry() { return arr[1]; } } seg; void init(int *C, int N, int K, int M) { P = __lg(K)+1; id.resize(N); cur.resize(N); pos.resize(K); for (int i = 0; i < N; i++) nxt[C[i]].pb(i); for (int i = 0; i < N; i++) nxt[i].pb(N); for (int i = 0; i < K; i++) pos[i] = i, id[i] = i; for (int i = K; i < N; i++) id[i] = -1; appr.clear(); } void Write(int num) { for (int i = 0; i < P; i++) { if ((1<<i) & num) WriteAdvice(1); else WriteAdvice(0); } } void ComputeAdvice(int *C, int N, int K, int M) { init(C, N, K, M); seg.build(1, 0, K-1); int stp = N; for (int i = N-1; i >= 0; i--) { if (appr.count(C[i])) { stp = i+1; break; } appr.insert(C[i]); } for (int i = 0; i < stp; i++) { cur[C[i]]++; if (id[C[i]] != -1) { seg.mdy(id[C[i]], C[i], 1, 0, K-1); } else { auto [_t, p] = seg.qry(); Write(p); id[pos[p]] = -1; id[C[i]] = p; pos[p] = C[i]; seg.mdy(p, C[i], 1, 0, K-1); } } }
#include <bits/stdc++.h> #include "assistant.h" using namespace std; #define debug(args...) kout("[ " + string(#args) + " ]", args) void kout() { cerr << endl; } template <class T, class ...U> void kout(T a, U ...b) { cerr << a << ' ',kout(b...); } template <class T> void pary(T L, T R) { while (L != R) cerr << *L << " \n"[++L==R]; } const int MAXN = 100000; int P; vector <int> id; vector <int> pos; void init(int N, int K, int M) { P = __lg(K)+1; id.resize(N); pos.resize(K); for (int i = 0; i < K; i++) id[i] = i, pos[i] = i; for (int i = K; i < N; i++) id[i] = -1; } int fnd(unsigned char *A, int a, int R) { int st = a * P, num = 0; if (st > R) return 0; for (int i = st; i < st + P; i++) { if ((int)A[i]) num += (1<<(i-st)); } return num; } void Assist(unsigned char *A, int N, int K, int R) { init(N, K, R); int now = 0; for (int i = 0; i < N; i++) { int req = GetRequest(); if (id[req] == -1) { int num = fnd(A, now++, R); PutBack(pos[num]); id[req] = id[pos[num]]; id[pos[num]] = -1; pos[num] = req; } } }

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

advisor.cpp: In member function 'void Seg::build(int, int, int)':
advisor.cpp:33:17: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   33 |     int mid = l + r >> 1;
      |               ~~^~~
advisor.cpp: In member function 'void Seg::mdy(int, int, int, int, int)':
advisor.cpp:44:17: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   44 |     int mid = l + r >> 1;
      |               ~~^~~
advisor.cpp: In function 'void ComputeAdvice(int*, int, int, int)':
advisor.cpp:92:12: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   92 |       auto [_t, p] = seg.qry();
      |            ^
#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...