Submission #1185103

#TimeUsernameProblemLanguageResultExecution timeMemory
1185103inesfiGlobal Warming (CEOI18_glo)C++20
10 / 100
128 ms18220 KiB
#include<bits/stdc++.h> using namespace std; #define endl "\n" #define int long long const int TAILLEMAXI=(1<<19),DECA=(1<<18); vector<pair<int,int>> tries; int prefixe[DECA],suffixe[DECA]; int arbre[TAILLEMAXI][3]; int nbval,decamax; int place[DECA],apres[DECA]; int maxi(int a,int b,int tab){ if (a==b){ return arbre[a][tab]; } if (a%2==1){ return max(arbre[a][tab],maxi(a+1,b,tab)); } if (b%2==0){ return max(arbre[b][tab],maxi(a,b-1,tab)); } return maxi(a/2,b/2,tab); } void change(int a,int tab){ while (a>1){ a/=2; arbre[a][tab]=max(arbre[a*2][tab],arbre[a*2+1][tab]); } } void lecture(){ cin>>nbval>>decamax; for (int i=0;i<nbval;i++){ int val; cin>>val; tries.push_back({val,-i}); } sort(tries.begin(),tries.end()); } void pref(){ for (auto i:tries){ int pos=-i.second; prefixe[pos]=maxi(DECA,DECA+pos,0)+1; arbre[DECA+pos][0]=prefixe[pos]; change(DECA+pos,0); } } void suff(){ for (int j=nbval-1;j>=0;j--){ int i=-tries[j].second; suffixe[i]=maxi(DECA+i,DECA+nbval,1)+1; arbre[DECA+i][1]=suffixe[i]; change(DECA+i,1); } } void construire(){ for (int i=0;i<nbval;i++){ place[tries[i].second]=i; } int a=0,b=0; /*for (int i=0;i<nbval;i++){ cout<<tries[i].first-decamax<<" "; } cout<<endl; for (int i=0;i<nbval;i++){ cout<<tries[i].first<<" "; } cout<<endl; return ;*/ while (a<nbval and b<nbval){ if (tries[a].first-decamax<tries[b].first){ apres[-tries[a].second]=b; //cout<<a<<endl; a++; } else { b++; } } if (b==nbval){ for (int i=a;i<nbval;i++){ apres[-tries[a].second]=nbval; } } } int trouver(){ int rep=0; for (int i=nbval-1;i>=0;i--){ rep=max(rep,prefixe[i]+maxi(apres[i]+DECA,nbval+DECA,2)); arbre[place[i]+DECA][2]=suffixe[i]; change(place[i]+DECA,2); } return rep; } signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); lecture(); pref(); suff(); construire(); cout<<trouver()<<endl; return 0; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...