• bzoj1150


    haha,贪心,边界条件折腾了我一会儿
    1 #include<cstdio> 2 #include<cctype> 3 #include<queue> 4 #include<algorithm> 5 using namespace std ; 6 7 const int MAXN = 1000000 + 200 ; 8 int N , K ; 9 int dis [ MAXN ] ; 10 int l [ MAXN ] ; 11 int r [ MAXN ] ; 12 int v [ MAXN ] ; 13 int vis [ MAXN ] ; 14 int ans ; 15 struct cmp { 16 bool operator () ( const int a , const int b ) { return v [ a ] > v [ b ] ; } ; 17 } ; 18 priority_queue < int , vector < int > , cmp > q ; 19 20 int main () { 21 scanf ( "%d%d" , & N , & K ) ; 22 for ( int i = 1 ; i <= N ; ++ i ) scanf ( "%d" , dis + i ) ; 23 for ( int i = 1 ; i < N ; ++ i ) v [ i ] = dis [ i + 1 ] - dis [ i ] ; 24 for ( int i = 1 ; i < N - 1 ; ++ i ) r [ i ] = i + 1 ; 25 for ( int i = 2 ; i < N ; ++ i ) l [ i ] = i - 1 ; 26 for ( int i = 1 ; i < N ; ++ i ) q . push ( i ) ; 27 fill_n ( vis + 1 , N , 1 ) ; 28 v [ 0 ] = 1000000000 + 1 ; 29 v [ N ] = 1000000000 + 1; 30 while ( K -- ) { 31 while ( ! vis [ q . top () ] ) q . pop () ; 32 const int o = q . top () ; q . pop () ; 33 ans += v [ o ] ; 34 vis [ l [ o ] ] = 0 ; 35 vis [ r [ o ] ] = 0 ; 36 v [ o ] = v [ l [ o ] ] + v [ r [ o ] ] - v [ o ] ; 37 q . push ( o ) ; 38 l [ o ] = l [ l [ o ] ] ; r [ o ] = r [ r [ o ] ] ; 39 r [ l [ o ] ] = l [ r [ o ] ] = o ; 40 } 41 printf ( "%d " , ans ) ; 42 }
  • 相关阅读:
    mfc窗口,父窗口parentwindow,所有者窗口ownerwindow 区别
    svn冲突问题详解 SVN版本冲突解决详解
    input的on(‘input’,function(0{})事件
    input 输入框两种改变事件的方式
    JSON格式
    AJAX的dataType问题
    什么是跨域请求?
    JSON.parse()和JSON.stringify()使用介绍
    .replace(/-/g,"/")的用法
    docker 实践(一)
  • 原文地址:https://www.cnblogs.com/Christopher-Cao/p/5114961.html
Copyright © 2020-2023  润新知