Submission #761119

#TimeUsernameProblemLanguageResultExecution timeMemory
761119fatemetmhrLast supper (IOI12_supper)C++17
0 / 100
70 ms13216 KiB
// ~ Be Name Khoda ~ // #include <bits/stdc++.h> #include "advisor.h" //#pragma GCC optimize ("O3") //#pragma GCC target("avx2") //#pragma GCC optimize("unroll-loops,Ofast") using namespace std; typedef long long ll; #define pb push_back #define mp make_pair #define all(x) x.begin(), x.end() #define fi first #define se second static const int maxn5 = 2e5 + 10; namespace fen{ int fen[maxn5]; inline void add(int id, int val){ for(++id; id < maxn5; id += id & -id) fen[id] += val; } inline int get(int id){ if(id < 0) return 0; int ret = 0; for(++id; id; id -= id & -id) ret += fen[id]; return ret; } } static vector <int> av[maxn5]; void ComputeAdvice(int *C, int n, int k, int m){ for(int i = n - 1; i >= 0; i--) av[C[i]].pb(i); for(int i = 0; i < n; i++) if(av[i].size()) fen::add(i, 1); for(int i = 0; i < k; i++){ int last = n; if(av[i].size()) last = av[i].back(); int diff = fen::get(last - 1); WriteAdvice(char('0' + diff >= k || last == n)); //cout << "ok " << i << ' ' << last << ' ' << diff << endl; } for(int i = 0; i < n; i++){ av[C[i]].pop_back(); fen::add(i, -1); int last = n; if(av[C[i]].size()){ last = av[C[i]].back(); fen::add(last, 1); } int diff = fen::get(last - 1); WriteAdvice(char('0' + last == n || diff >= k)); } }
// ~ Be Name Khoda ~ // #include "assistant.h" #include <bits/stdc++.h> //#pragma GCC optimize ("O3") //#pragma GCC target("avx2") //#pragma GCC optimize("unroll-loops,Ofast") using namespace std; typedef long long ll; #define pb push_back #define mp make_pair #define all(x) x.begin(), x.end() #define fi first #define se second static const int maxn5 = 2e5 + 10; static vector <int> av; static bool mark[maxn5]; void Assist(unsigned char *A, int n, int k, int r){ fill(mark, mark + k, true); for(int i = 0; i < k; i++) if(A[i]) av.pb(i); for(int i = 0; i < n; i++){ int req = GetRequest(); if(!mark[req]){ if(av.empty()){ cout << "Wrong algorithm " << i << endl; exit(0); } int v = av.back(); av.pop_back(); PutBack(v); mark[v] = false; } mark[req] = true; if(A[i + k]) av.pb(req); } }
#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...