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>
#include "towers.h"
using namespace std;
int a,b,c,d,e,i,j,ii,jj,zx,xc,f[100009],pas,L,R,D,dp[100009],fen[200009],K[100009],HD[1000009],fen2[200009];
map <int, int> m;
map <int, int>::iterator it;
void init(int NN, std::vector<int> HH) {
a=NN;
}
void upd(int q, int w){
while(q<=200005){
fen[q]=max(fen[q],w);
q=q+(q&(-q));
}
}
int read(int q){
int sm=0;
while(q>0){
sm=max(sm,fen[q]);
q=q-(q&(-q));
}
return sm;
}
void upd2(int q, int w){
q=200003-q;
while(q<=200005){
fen2[q]=max(fen2[q],w);
q=q+(q&(-q));
}
}
int read2(int q){
q=200003-q;
int sm=0;
while(q>0){
sm=max(sm,fen2[q]);
q=q-(q&(-q));
}
return sm;
}
int max_towers(int LL, int RR, int DD) {
pas=1;LL++;RR++;
L=LL;R=RR;D=DD;
for(i=1; i<=R-L+1; i++){
f[i]=f[i+L-1];
}
a=R-L+1;
for(i=1; i<=a; i++){
m[f[i]]=1;m[f[i]+D]=1;
}
zx=0;
for(it=m.begin(); it!=m.end(); it++){
zx++;
(*it).second=zx;
}
for(i=1; i<=a; i++){
HD[i]=m[f[i]+D];
K[i]=m[f[i]];
}
for(i=1; i<=a; i++){
dp[i]=read2(HD[i])+1;
zx=read(K[i]);
upd2(K[i],zx);
upd(HD[i],dp[i]);
}
for(i=1; i<=a; i++){
pas=max(pas,dp[i]);
}
return pas;
}
# | 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... |