社区讨论

警示后入TLE

P5524[Ynoi2012] NOIP2015 充满了希望参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mhz4fime
此快照首次捕获于
2025/11/15 01:17
3 个月前
此快照最后确认于
2025/11/16 13:56
3 个月前
查看原帖
如果你TLE了,请考虑vector常数(别用vector离散化!!!请用sort+指针!!!)。
TLE写法:
CPP
 for( register int i = 1 ; i <= m ; i ++ ) 
    {
        if( input[ i ].id != 0 ) b.insert( input[ i ].id , input[ i ].cost ); 
        for( vector< pair< int , pair< int , int > > >::iterator it = died[ i ].begin() ; it != died[ i ].end() ; it ++ ) 
        {
            if( ( it -> second ).first < 0 ) 
            {
                ans[ it -> first ] -= b.ask( ( it -> second ).second ) ; 
                if( 0 - ( it -> second ).first > 1 ) ans[ it -> first ] += b.ask( 0 - ( ( it -> second ).first ) - 1 ) ;  
            }
            else 
            {
                ans[ it -> first ] += b.ask( ( it -> second ).second ) ;
                if( ( it -> second ).first > 1 ) ans[ it -> first ] -= b.ask( ( it -> second ).first - 1 ) ; 
            }
        }
    }
正确写法:
CPP
for( register int i = 1 ; i <= m ; i ++ ) 
    {
        // b.insert( input[ i ].id , input[ i ].cost ) ; 
        if( input[ i ].id != 0 ) b.insert( input[ i ].id , input[ i ].cost ); 
        while( l < died.size()&&died[ l ].first.first <= i )
        {
            if( died[ l ].first.second < 0 ) 
            {
                ans[ -died[ l ].first.second ] -= b.ask( died[ l ].second.second ) ; 
                if( died[ l ].second.first != 1 ) 
                ans[ -died[ l ].first.second ] += b.ask( died[ l ].second.first - 1 ) ;  
            }
            else 
            {
                ans[ died[ l ].first.second ] += b.ask( died[ l ].second.second ) ; 
                if( died[ l ].second.first != 1 ) 
                ans[ died[ l ].first.second ] -= b.ask( died[ l ].second.first - 1 ) ; 
            }
            l ++ ; 
            // cout << l << " " ; 
        }
    }
(vector常数大的吓人!!!)

回复

1 条回复,欢迎继续交流。

正在加载回复...