Untitled

 avatar
user_0483151
plain_text
15 days ago
1.8 kB
4
Indexable
// y.ha
#include <bits/stdc++.h>
#define cook '\n'
#define maxn 100005
#define Task "A"
using namespace std;

int n ;
int a[maxn], SD[maxn], xuoi[maxn], nguoc[maxn], T[maxn] ;
vector<int> v ;

int sumdigit(int x) {
    int s = 0 ;
    while ( x ) {
        s += ( x % 10 ) ;
        x/=10 ;
    }
    return s ;
}

void inp() {
    cin >> n ;
    for ( int i = 1; i <= n; i++ ) {
        cin >> a[i] ;
        SD[i] = sumdigit(a[i]) ;
    }
    v.assign(SD+1, SD+n+1) ;
    sort(v.begin(), v.end()) ;
    v.resize(unique(v.begin(), v.end()) - v.begin()) ;
    for ( int i = 1; i <= n; i++ )
        a[i] = lower_bound(v.begin(), v.end(), SD[i]) - v.begin() + 1 ;
}

int get(int u) {
    int ans = 0 ;
    while ( u ) {
        ans = max(ans, T[u]) ;
        u -= ( u & (-u) ) ;
    }
    return ans ;
}

void add(int u, int val) {
    while ( u <= n ) {
        T[u] = max(T[u], val) ;
        u += ( u & (-u) ) ;
    }
}

void re(int X[maxn]) {
    for ( int i = 1; i <= n/2; i++ ) swap(X[i], X[n-i+1]) ;
}

void reset(int X[maxn]) {
    for ( int i = 1; i <= n; i++ ) X[i] = 0 ;
}

int main()
{
    ios_base::sync_with_stdio(0) ;
    cin.tie(nullptr) ;
    if(fopen(Task".INP","r")) {
        freopen(Task".INP","r",stdin);
        freopen(Task".OUT","w",stdout);
    }
    inp() ;
    for ( int i = 1; i <= n; i++ ) {
        xuoi[i] = get(a[i]-1) + SD[i] ;
        add(a[i], xuoi[i]) ;
    }
    reset(T) ;
    re(a) ;
    re(SD) ;
    for ( int i = 1; i <= n; i++ ) {
        nguoc[i] = get(a[i]-1) + SD[i] ;
        add(a[i], nguoc[i]) ;
    }
    re(SD) ;
    re(nguoc) ;
    int res = -1e9 ;
    for ( int i = 1; i <= n; i++ ) res = max(res, xuoi[i] + nguoc[i] - SD[i] ) ;
    cout << res ;
    return(0) ;
}
Editor is loading...
Leave a Comment