HDU6162(树链剖分)

难受,翻了各种傻逼错误,导致现在才改完

(函数没return,样例忘了换行,多余输出忘了删,估计是太晚了,脑子已经瓦特了)

,,,,

昨天是2018WF  莫斯科拿了一个冠军一个亚军,北大主场拿了季军。


这是一个树链剖分裸题,但是以前没看过,还比较简单,

来几个博客

点击打开链接;

点击打开链接;

;此题借鉴点击打开链接



#include
#include
#include
#include
#include
#include
#include
#include
#include

using namespace std;

const int maxn = 1e5+7;

vector eg[maxn];
int top[maxn];

int siz[maxn];
int son[maxn];
int tid[maxn];
int ran[maxn];
int dep[maxn];
int fa[maxn];
int cnt,n;
long long  val[maxn];
long long  s[maxn];
long long tree[maxn*4],mx[maxn*4],mn[maxn*4];
void init()
{
    memset(son,-1,sizeof(son));
    memset(siz,0,sizeof(siz));
    memset(fa,0,sizeof(fa));
    memset(tid,0,sizeof(tid));
}
void dfs1(int u,int f,int d)
{
    //cout<<".."<siz[son[u]])
            {
                son[u]=v;
            }
        }
    }

}
void dfs2(int u,int tp)
{
    //cout<>1;
    build(root*2,l,mid);
    build(root*2+1,mid+1,r);
    tree[root]=tree[root*2]+tree[root*2+1];
    mx[root]=max(mx[root*2],mx[root*2+1]);
    mn[root]=min(mn[root*2],mn[root*2+1]);
}

long long query(int root,int l,int r,int ql,int qr,long long a,long long  b)
{
  //  if(ql>r||qr=r)
    {
        //if(mn[root]>b||mx[root]b||mx[root]=a)
            return tree[root];
        
    }
    int mid=(l+r)>>1;
    long long ans=0;
    if(ql<=mid)
        ans+=query(root*2,l,mid,ql,qr,a,b);
    if(qr>mid)
        ans+=query(root*2+1,mid+1,r,ql,qr,a,b);
    //cout<=a&&s[u]<=b)
            ans+=s[u];
            //cout<<","<dep[v])
        swap(u,v); //cout<<","<
wa的可太惨了,睡觉

你可能感兴趣的:(算法,数据结构,杂记)