Submission #1255331

#TimeUsernameProblemLanguageResultExecution timeMemory
1255331tiagoGlobal Warming (CEOI18_glo)C++20
100 / 100
744 ms55368 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int maxn = (1e5 + 10)*4; int seg[4*maxn]; int seg_semmuda[4*maxn]; void definir(int x, int posi, int ld, int rd, int idx, int qual){ if(ld == rd){ if(qual == 0) seg[idx] = max(seg[idx],x); else seg_semmuda[idx] = max(seg_semmuda[idx],x); return; } int meio = (ld+rd)/2; if(posi <= meio) definir(x,posi,ld,meio,idx*2,qual); else if(posi > meio) definir(x,posi,meio+1,rd,idx*2+1,qual); if(qual == 0) seg[idx] = max(seg[idx*2],seg[idx*2+1]); else seg_semmuda[idx] = max(seg_semmuda[idx*2],seg_semmuda[idx*2+1]); } int achar(int l, int r, int ld, int rd, int idx, int qual){ if(ld >= l and rd <= r){ if(qual == 0) return seg[idx]; else return seg_semmuda[idx]; } if(ld > r or rd < l) return 0; int meio = (ld+rd)/2; return max(achar(l,r,ld,meio,idx*2,qual),achar(l,r,meio+1,rd,idx*2+1,qual)); } signed main(){ memset(seg,0,sizeof(seg)); memset(seg_semmuda,0,sizeof(seg_semmuda)); int n,d; cin >> n >> d; map<int,int> compre; int aux; vector<int> v; vector<int> ordem; for(int i = 1; i <= n; i++){ cin >> aux; v.push_back(aux); ordem.push_back(aux); ordem.push_back(aux+d); } sort(ordem.begin(),ordem.end()); int atu = 1; for(int i = 0; i < (int)ordem.size(); i++){ if(compre.find(ordem[i]) == compre.end()){ compre[ordem[i]] = atu; atu++; } } int resul = 0; for(int i = 0; i < n; i++){ aux = v[i]; int puloantigo = achar(1,compre[aux]-1,1,2*n,1,0) + 1; int pulonovo = achar(1,compre[aux+d]-1,1,2*n,1,1) + 1; int sempulo = achar(1,compre[aux]-1,1,2*n,1,1) + 1; int maior = max(puloantigo,pulonovo); resul = max(maior,resul); definir(maior,compre[aux],1,2*n,1,0); definir(sempulo,compre[aux],1,2*n,1,1); //cout << endl; //cout << aux << endl; //cout << puloantigo << " " << pulonovo << " " << sempulo << endl; } cout << resul; 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...