# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
274854 | arnold518 | Teams (CEOI11_tea) | C++14 | 591 ms | 153244 KiB |
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>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
const int MAXN = 1e6;
const int INF = 987654321;
struct dequeue
{
int st;
vector<int> V;
dequeue() : st(0) {}
bool empty() { return st==V.size(); }
void push_back(int x) { V.push_back(x); }
void push_front(int x) { V[--st]=x; }
void pop_back() { V.pop_back(); }
void pop_front() { st++; }
int front() { return V[st]; }
int back() { return V.back(); }
};
int N;
pii B[MAXN+10];
int dp1[MAXN+10], dp2[MAXN+10];
int pmax[MAXN+10];
dequeue DQ[MAXN+10];
int memo[MAXN+10];
vector<int> V[MAXN+10];
int main()
{
scanf("%d", &N);
for(int i=1; i<=N; i++) scanf("%d", &B[i].first), B[i].second=i;
//for(int i=1; i<=N; i++) A[i]=rand()%(N/2)+1;
sort(B+1, B+N+1);
for(int i=1; i<=N; i++)
{
dp1[i]=-INF;
if(i-B[i].first>=0)
{
dp1[i]=pmax[i-B[i].first]+1;
V[i-B[i].first].push_back(i);
}
pmax[i]=max(pmax[i-1], dp1[i]);
}
for(int i=0; i<=N; i++)
{
if(dp1[i]!=-INF)
{
while(!DQ[dp1[i]].empty() && dp2[DQ[dp1[i]].back()]>=dp2[i]) DQ[dp1[i]].pop_back();
DQ[dp1[i]].push_back(i);
}
for(auto it : V[i])
{
int p=dp1[it]-1;
int val=-1;
while(!DQ[p].empty() && dp2[DQ[p].front()]<=it-DQ[p].front())
{
val=DQ[p].front();
DQ[p].pop_front();
}
if(val!=-1 && (DQ[p].empty() || max(it-val, dp2[val])<dp2[DQ[p].front()])) DQ[p].push_front(val);
dp2[it]=max(it-DQ[p].front(), dp2[DQ[p].front()]);
memo[it]=DQ[p].front();
}
}
printf("%d\n", dp1[N]);
int now=N; int cnt=0;
while(now)
{
printf("%d ", now-memo[now]); cnt++;
for(int i=now; i>memo[now]; i--) printf("%d ", B[i].second);
printf("\n"); now=memo[now];
}
assert(cnt==dp1[N]);
}
Compilation message (stderr)
# | 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... |
# | 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... |