This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define debug(x) cerr << #x << " " << x << "\n"
#define debugs(x) cerr << #x << " " << x << " "
#include "advisor.h"
//#include "assistant.h"
using namespace std;
typedef long long ll;
typedef pair <int, int> pii;
typedef pair <long double, pii> muchie;
const ll NMAX = 100001;
const ll VMAX = 21;
const ll INF = 2e9;
const ll MOD = 1000000007;
const ll BLOCK = 2154;
const ll base = 31;
const ll nr_of_bits = 17;
int utill[NMAX * 2];
int f[NMAX];
int nou[NMAX * 2];
int last[NMAX * 2];
int ap[NMAX];
void ComputeAdvice(int *C, int N, int K, int M) {
priority_queue <pii> pq;
set <pii> st;
int cnt = 0;
for(int i = 0; i < K; i++)
nou[i] = i;
for(int i = K; i < K + N; i++) {
nou[i] = C[i - K];
}
for(int i = 0; i < NMAX; i++) {
ap[i] = 2e9;
}
for(int i = N + K - 1; i >= 0; i--) {
last[i] = ap[nou[i]];
ap[nou[i]] = i;
}
for(int i = 0; i < K; i++) {
pq.push({last[i], i});
f[i] = 1;
st.insert({i, i});
}
for(int i = 0; i < N; i++) {
int request = C[i];
auto it = st.lower_bound({request, 0});
if(it != st.end() && (*it).first == request) {
/// A fost util si l stergem
utill[(*it).second] = 1;
st.erase(it);
///
} else {
/// Stergem pe cel care apare cel mai tarziu
while(pq.size() && f[pq.top().second] == 0)
pq.pop();
pii x = pq.top(); /// nici nu dam pop ca totul e safe
st.erase(*st.lower_bound({x.second, 0}));
f[x.second] = 0;
}
/// Adaugam noul element
pq.push({last[i + K], request});
st.insert({request, i + K});
f[request] = 1;
}
for(int i = 0; i < N + K; i++) {
WriteAdvice(utill[i]);
}
}
#include <bits/stdc++.h>
#define debug(x) cerr << #x << " " << x << "\n"
#define debugs(x) cerr << #x << " " << x << " "
//#include "advisor.h"
#include "assistant.h"
using namespace std;
typedef long long ll;
typedef pair <int, int> pii;
typedef pair <long double, pii> muchie;
const ll NMAX = 100001;
const ll VMAX = 21;
const ll INF = 2e9;
const ll MOD = 1000000007;
const ll BLOCK = 2154;
const ll base = 31;
const ll nr_of_bits = 17;
int utill[NMAX * 2];
int f[NMAX];
int nou[NMAX * 2];
int last[NMAX * 2];
int ap[NMAX];
void Assist(unsigned char *A, int N, int K, int R) {
set <int> util, inutil;
for(int i = 0; i < K; i++) {
int utility = A[i];
if(utility) {
util.insert(i);
} else {
inutil.insert(i);
}
}
for(int i = 0; i < N; i++) {
int utility = A[i + K];
int request = GetRequest();
if(util.find(request) != util.end() || inutil.find(request) != inutil.end()) {
util.erase(request);
inutil.erase(request); /// vrem sa inlocuim cu noua chestie
} else {
auto it = inutil.rbegin();
PutBack((int)*it);
inutil.erase(*it);
}
if(utility) {
util.insert(request);
} else {
inutil.insert(request);
}
}
}
Compilation message (stderr)
advisor.cpp: In function 'void ComputeAdvice(int*, int, int, int)':
advisor.cpp:29:9: warning: unused variable 'cnt' [-Wunused-variable]
29 | int cnt = 0;
| ^~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |