Submission #1187006

#TimeUsernameProblemLanguageResultExecution timeMemory
1187006inesfiJust Long Neckties (JOI20_ho_t1)C++20
100 / 100
85 ms14256 KiB
#include<bits/stdc++.h> using namespace std; #define endl "\n" #define int long long const int TAILLEMAXI=(1<<19),DECA=(1<<18); int rep[DECA]; vector<int> pers; vector<pair<int,int>> nouv; int arbre[TAILLEMAXI]; int maxi(int a,int b){ if (a==b){ return arbre[a]; } if (a%2==1){ return max(arbre[a],maxi(a+1,b)); } if (b%2==0){ return max(arbre[b],maxi(a,b-1)); } return maxi(a/2,b/2); } void change(int a){ while (a>1){ a/=2; arbre[a]=max(arbre[2*a],arbre[2*a+1]); } } signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int nbpers; cin>>nbpers; for (int i=0;i<nbpers+1;i++){ int a; cin>>a; nouv.push_back({a,i}); } for (int i=0;i<nbpers;i++){ int b; cin>>b; pers.push_back(b); } sort(nouv.begin(),nouv.end()); sort(pers.begin(),pers.end()); for (int i=0;i<nbpers;i++){ arbre[DECA+i]=max(nouv[i+1].first-pers[i],(int)0); //cout<<arbre[DECA+] } for (int i=DECA-1;i>=1;i--){ arbre[i]=max(arbre[2*i],arbre[2*i+1]); } rep[nouv[0].second]=maxi(DECA,DECA+nbpers-1); /*for (int j=0;j<nbpers;j++){ cout<<arbre[DECA+j]<<" "; } cout<<endl;*/ for (int i=0;i<nbpers;i++){ arbre[DECA+i]=max(nouv[i].first-pers[i],(int)0); change(DECA+i); /*for (int j=0;j<nbpers;j++){ cout<<arbre[DECA+j]<<" "; } cout<<endl;*/ rep[nouv[i+1].second]=maxi(DECA,DECA+nbpers-1); } for (int i=0;i<nbpers+1;i++){ cout<<rep[i]<<" "; } cout<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...