zoukankan      html  css  js  c++  java
  • hdu--2795--又是线段树

    应该就是算 线段树的 单点更新吧.

    但一开始给了我一个错觉 是二维线段树  我也是醉了

    tree[root].x// x = L || R表示root这个结点表示的是L - > R这个区间

    tree[root].leftLen//表示 root这个结点所在的区间现在还存在的最长连续格子数

    更让人郁闷的是 我用cin cout写 即使写上了cin.sync_with_stdio(false)还是TLE。。。

    我也是无语了  以前在Hdu上都是有效的啊...

    然后 我改成scanf  printf就过了...

     1 #include <iostream>
     2 #include <algorithm>
     3 using namespace std;
     4 
     5 const int size = 200010;
     6 struct data
     7 {
     8     int L;
     9     int R;
    10     int leftLen;
    11 }tree[size*4]; 
    12 
    13 void build( int root , int L , int R , int w )
    14 {
    15     int Mid = ( R + L ) >> 1;
    16     tree[root].L = L;
    17     tree[root].R = R;
    18     tree[root].leftLen = w;
    19     if( L==R )
    20     {
    21         return ;
    22     }
    23     build( root<<1 , L , Mid , w );
    24     build( root<<1|1 , Mid+1 , R , w );
    25 }
    26 
    27 void pushUp( int root )
    28 {
    29     tree[root].leftLen = max( tree[root<<1].leftLen , tree[root<<1|1].leftLen );    
    30 }
    31 
    32 void update( int root , int w )
    33 {
    34     int ans;
    35     if( tree[root].L == tree[root].R )
    36     {
    37         tree[root].leftLen -= w;
    38          cout << tree[root].L << endl;
    39          return ;
    40     }    
    41     if( tree[root<<1].leftLen >= w )
    42          update( root<<1 , w );
    43     else if( tree[root<<1|1].leftLen >= w )
    44          update( root<<1|1 , w );
    45      pushUp( root );
    46 }
    47     
    48 int main()
    49 {
    50     cin.sync_with_stdio(false);
    51     int h , w , n;
    52     while( cin >> h >> w >> n )
    53     {
    54         h = min( h , n );
    55         build( 1 , 1 , h , w );
    56         while( n-- )
    57         {
    58             cin >> w;
    59             if( tree[1].leftLen < w )
    60                 cout << -1 << endl;
    61             else
    62                 update( 1 , w );
    63         }
    64     }
    65     return 0;
    66 }
    View Code

    我这边就还是贴 tle的代码了 还是比较喜欢cin cout的风格 =_=

    today:

      你平静地像一抹夕阳

      他们都忘了你朝阳时的模样

    just follow your heart
  • 相关阅读:
    JAVA Unsafe类
    进程通信的五种普通方法
    监控API的实现 周末补
    INLINE HOOK 简单实现
    跨域资源请求方式
    在博客园放入“可运行”javascript代码
    一些学习资源
    XXE篇-本着就了解安全本质的想法,尽可能的用通俗易懂的语言去解释安全漏洞问题
    Mongodb注入
    SSRF篇-本着就了解安全本质的想法,尽可能的用通俗易懂的语言去解释安全漏洞问题
  • 原文地址:https://www.cnblogs.com/radical/p/4069790.html
Copyright © 2011-2022 走看看