查看文章
 
Jul.23+某人的第一题
2009-07-24 12:14

天气好热……不知道是因为热的原因还是因为被昨天吓到了的原因,
总之昨天晚上醒来了应该是四五次……有印象的有3点半的一次和5点42的一次。

总之虽然热得不行,事实上却是阴天,还真是讽刺啊。
话说回来阴天热不是正常的么……果然我胡言乱语了。

又一个性格残疾的孩子,唉可惜了。
我以前说过,性格基本上是不可能,我们也没有义务去纠正的。
所以说只能旁观然后感慨而已。
说真的,在这个环境里EQ比IQ重要太多了。

下东西的速度还真是不稳……从几K到几百K之间来回摇摆……
总之RP好的话说不定能在回国之前把其中一部分拖完……

下面是某人的东西……这两天手忙脚乱的,今天晚上刚抽出时间,抱歉。

/*
第一题,随机更改数据和查询
线段树应该说是第一选择
(当然,树形数组也可以?)
简而言之重点就是下面这个线段树的实现
命令解析和调用的部分没啥内涵就略过了
Elysion
Jul.23
*/
#include<stdio.h>
#include<stdlib.h>
class SegmentTree
{
      private:
             int value;
             int place;
             int min;
             int max;
             SegmentTree* left;
             SegmentTree* right;
      public:
             int Sum()
             {
                 if(this->left==NULL && this->right==NULL)
                 {
                                     return value;
                                     }
                 else
                 {
                     return this->left->Sum()+this->right->Sum();
                     }
                 }
             SegmentTree(int start,int end,int base_value)
             :min(start),max(end),place((end+start)/2)
             {
                             if(start!=end)
                             {
                                           left=new SegmentTree(start,place,base_value);
                                           right=new SegmentTree(place+1,end,base_value);
                                           value=this->Sum();
                                           }
                             else
                             {
                                 value=base_value;
                                 left=NULL;
                                 right=NULL;
                                 }
             }
             void Plus(int start,int end,int plus_val)
             {
                  if(end<min || start>max) return;
                  if(min<=start && max>=end)
                  {
                                value+=(end-start+1)*plus_val;
                                }
                  if(left)
                  {
                  if(place>=start)
                  {
                                  if(place>=end) left->Plus(start,end,plus_val);
                                  else
                                  {
                                      left->Plus(start,place,plus_val);
                                      right->Plus(place+1,end,plus_val);
                                      }
                                  }
                  else right->Plus(start,end,plus_val);
                                  }
                 }
             int Query(int start,int end)
             {
                 if(start==min && end==max) return value;
                 if(place>=start)
                 {
                                     if(place>=end) return left->Query(start,end);
                                     else return left->Query(start,place)+right->Query(place+1,end);
                                     }
                 else return right->Query(start,end);
                 }
      };


类别:默认分类||添加到搜藏 |分享到i贴吧|浏览(165)|评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu