class Solution { public: vector<int>fen; int bestTeamScore(vector<int>& scores, vector<int>& ages) { vector<pair<int,int>>vpair; for(int i=0;i<size(scores);i++)vpair.emplace_back(scores[i],ages[i]); sort(begin(vpair),end(vpair)); int mage=0; for(int&i:ages)mage=max(mage,i); fen.resize(mage+1); auto query=[&](int k){int v=-1000000007;do v=max(v,fen[k]);while(k-=k&-k);return v;}; auto update=[&](int k,int v){do fen[k]=max(fen[k],v);while(k+=k&-k,k<=mage);return v;}; int ans=-1000000007; for(auto[s,a]:vpair) { int b=s+query(a); update(a,b); ans=max(ans,b); } return ans; } };

펜윅 트리를 사용한 풀이입니다