Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
27850 22级苏昀皓 【S】T1最大后缀值个数 C++ 解答错误 0 400 MS 14608 KB 1858 2024-03-31 11:43:12

Tests(0/10):


#include <bits/stdc++.h> #define lson ( pos << 1 ) #define rson ( pos << 1 | 1 ) using namespace std ; int n , fa[1000006] , val[1000006] , dp[1000006] ; struct SegTree{ int max ; }tre[4000006]; void pushup( int pos ){ tre[pos].max = max( tre[lson].max , tre[rson].max ); return ; } void build( int pos , int l , int r ){ if( l == r ){ tre[pos].max = 1 ; return ; } int mid = ( l + r ) >> 1 ; build( lson , l , mid ); build( rson , mid+1 , r ); pushup( pos ); return ; } void update( int pos , int l , int r , int ii , int x ){ if( l == r ){ tre[pos].max = x ; return ; } int mid = ( l + r ) >> 1 ; if( ii <= mid ){ update( lson , l , mid , ii , x ); } if( ii > mid ){ update( rson , mid+1 , r , ii , x ); } pushup( pos ); return ; } int query( int pos , int l , int r , int ql , int qr ){ if( ql <= l && qr >= r ){ return tre[pos].max ; } int mid = ( l + r ) >> 1 ; int res = 0 ; if( ql <= mid ){ res = max( res , query( lson , l , mid , ql , qr )); } if( qr > mid ){ res = max( res , query( rson , mid+1 , r , ql , qr )); } return res ; } int main(){ scanf("%d" , &n ); bool mark = false ; for( int i = 2 ; i <= n ; ++ i ){ scanf( "%d" , &fa[i] ); if( i > 2 && fa[i] != i-1 ){ mark = true ; } } if( mark == false ){ for( int i = 1 ; i <= n ; ++ i ){ scanf( "%d" , &val[i] ); dp[i] = 1 ; } build( 1, 1 , 1000006 ); for( int i = 2 ; i <= n ; ++ i ){ dp[i] = max( dp[i] , query( 1 , 1 , n , 1 , i-1)); update( 1 , 1 , n , i , dp[i] ); } for( int i = 1 ; i <= n ; ++ i ){ printf("%d " , dp[i] ); } }else{ int o ; for( int i = 1 ; i <= n ; i ++ ){ cin >> o ; } cout << 1 << " "; for( int i = 1 ; i < n ; i ++ ){ cout << "2 " ; } cout << endl; } return 0 ; }


测评信息: