제출 #1184417

#제출 시각아이디문제언어결과실행 시간메모리
1184417inesfiGlobal Warming (CEOI18_glo)C++20
0 / 100
63 ms16284 KiB
#include<bits/stdc++.h> using namespace std; #define endl "\n" #define int long long const int TAILLEMAXI=(1<<19),DECA=(1<<18); vector<int> t; vector<pair<int,int>> tries; int prefixe[DECA],suffixe[DECA]; int arbre[TAILLEMAXI][3]; int nbval,decamax,rep; int place[DECA],apres[DECA]; int r; 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){ a/=2; while (a!=(int)0){ arbre[a][tab]=max(arbre[a*2][tab],arbre[a*2+1][tab]); a/=2; } } void lecture(){ cin>>nbval>>decamax; for (int i=0;i<nbval;i++){ int val; cin>>val; t.push_back(val); tries.push_back({val,-i}); } sort(tries.begin(),tries.end()); } void pref(){ for (auto i:tries){ prefixe[-i.second]=maxi(DECA,DECA-i.second,(int)0)+1; arbre[DECA-i.second][0]=prefixe[-i.second]; r=max(rep,prefixe[-i.second]); change(DECA-i.second,(int)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]; //rep=max(rep,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){ if (tries[a].first-decamax<tries[b].first){ apres[-tries[a].second]=b; //cout<<a<<endl; a++; } else { b++; } } } 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(); cout<<r<<endl; return 0; 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...