做法同树上第K大

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
const int MAXN =(int)1e5+10;
typedef long long ll;
int vl[MAXN],n,m,vsz;
vector<int>ve;
int root[MAXN],ls[MAXN*40],rs[MAXN*40],tot,dep[MAXN],f[MAXN][20];
ll sum[MAXN*40];
void insert(int l,int r,int &x,int y,int pos){x=++tot;ls[x]=ls[y],rs[x]=rs[y],sum[x]=sum[y]+ve[pos-1];if(l==r)return;int mid=l+r>>1;if(mid>=pos)insert(l,mid,ls[x],ls[y],pos);else insert(mid+1,r,rs[x],rs[y],pos);
}
ll query(int l,int r,int u,int v,int a,int b,int k){if(l==r)return sum[u]+sum[v]-sum[a]-sum[b];int mid=l+r>>1;if(k<=mid)return query(l,mid,ls[u],ls[v],ls[a],ls[b],k);else{return sum[ls[u]]+sum[ls[v]]-sum[ls[a]]-sum[ls[b]]+query(mid+1,r,rs[u],rs[v],rs[a],rs[b],k);}
}
int lca(int a,int b){int t,i;if(dep[a]<dep[b])t=a,a=b,b=t;for(i=16;i>=0;i--){if(dep[f[a][i]]>=dep[b])a=f[a][i];}if(a==b)return a;for(i=16;i>=0;i--){if(f[a][i]!=f[b][i]&&f[a][i]!=0&&f[b][i]!=0)a=f[a][i],b=f[b][i];}return f[a][0];
}
struct edge{int nxt,to;
}ed[MAXN<<1];
int head[MAXN],cnt;
void addedge(int u,int v){ed[cnt].to=v;ed[cnt].nxt=head[u];head[u]=cnt++;
}
void dfs(int u,int pre){insert(1,vsz,root[u],root[pre],vl[u]);for(int i=head[u];i!=-1;i=ed[i].nxt){ int v=ed[i].to; if(!dep[v]){            dep[v]=dep[u]+1;f[v][0]=u; dfs(v,u);}}
}
ll query(int u,int v,int k){if(k==0)return 0;int LCA=lca(u,v);return query(1,vsz,root[u],root[v],root[LCA],root[f[LCA][0]],k);
}
ll ans[MAXN];
int main()
{while(~scanf("%d%d",&n,&m)){ve.clear();for(int i=1;i<=n;i++)head[i]=-1,dep[i]=0,root[i]=0;for(int i=1;i<=n;i++)for(int j=1;j<=20;j++)f[i][j]=0;cnt=0;for(int i=1;i<=n;i++)scanf("%d",&vl[i]),ve.push_back(vl[i]);sort(ve.begin(),ve.end());ve.erase(unique(ve.begin(),ve.end()),ve.end());vsz=ve.size();for(int i=1;i<=n;i++)vl[i]=lower_bound(ve.begin(),ve.end(),vl[i])-ve.begin()+1;for(int i=1;i<n;i++){int u,v;scanf("%d%d",&u,&v);addedge(u,v);addedge(v,u);}dep[1]=1;dfs(1,0);for(int j=1;(1<<j)<=n;j++)for(int i=1;i<=n;i++)if(f[i][j-1]!=0)f[i][j]=f[f[i][j-1]][j-1];for(int i=1;i<=m;i++){int u,v,x,y;scanf("%d%d%d%d",&u,&v,&x,&y);y=upper_bound(ve.begin(),ve.end(),y)-ve.begin();x=lower_bound(ve.begin(),ve.end(),x)-ve.begin();ans[i]=query(u,v,y)-query(u,v,x);}for(int i=1;i<=m;i++){printf("%lld",ans[i]);if(i!=m)printf(" ");else printf("\n");}for(int i=0;i<=tot;i++)ls[i]=rs[i]=sum[tot]=0;tot=0;}return 0;
}

HDU 6162 Ch’s gift相关推荐

  1. HDU 6162 2017 多校训练:Ch's gift(树链剖分)

    题意: 有一棵n个节点的树,m次查询,每次查询x, y, a, b表示节点x到y的路径上所有在[a, b]范围内的权值和 树链剖分+线段树 询问离线,按a和b分别排序求出所有小于a和所有小于b+1的权 ...

  2. 2016CCPC东北地区大学生程序设计竞赛题解

    以下所有AC题解程序来自"仙客传奇"团队. A. Minimum's Revenge AC的C++语言程序: #include<iostream> using name ...

  3. HDU 3236 Gift Hunting (程序猿的哄女朋友方式)

    哄女朋友开心的错误示范. 题意:你和你女朋友(不,你没有)去购物,你有两个购物券v1,v2,不能叠加使用,所购买的礼物的和不超过券的值就可以买,你女朋友过生日,可以免费带走一个礼物.礼物有价格p和女朋 ...

  4. HDU 5972 Regular Number(ShiftAnd+读入优化)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5972 [题目大意] 给出一个字符串,找出其中所有的符合特定模式的子串位置,符合特定模式是指,该子串 ...

  5. fwt优化+树形DP HDU 5909

    1 //fwt优化+树形DP HDU 5909 2 //见官方题解 3 // BestCoder Round #88 http://bestcoder.hdu.edu.cn/ 4 5 #include ...

  6. hdu 5099 Comparison of Android versions 枚举题意

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5099 卡读题,实际上题目中表述的题意并不完整,所以要认真读并且加上一些现实的"常识" ...

  7. 【HDU】1237 简单计算器 (stack)

    http://acm.hdu.edu.cn/showproblem.php?pid=1237 题目很好理解,一开始想用优先队列,但好像有点难实现,用stack比较好实现,遇到" * &quo ...

  8. hdu 5273 Dylans loves sequence 逆序数简单递推

    Dylans loves sequence Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem ...

  9. HDU 4333 [SAM WRONG!!!]

    题意:给一个数字,每一次把它的最后一位拿到最前面,一直那样下去,分别求形成的数字小于,等于和大于原来数的个数. SAM上就是走n步 相等好好做啊,但是大于小于不好做啊,用类似弦论的思想也不能处理出怎样 ...

最新文章

  1. php单例模式的实例,PHP的单例模式的一个实例_php
  2. SEO网络优化的三个博客优化技巧
  3. 冷板式液冷--术语、定义和缩略语(6-1)
  4. 转载、Python的编码处理(二)
  5. 使用 jQuery Mobile 与 HTML5 开发 Web App (八) —— jQuery Mobile 工具栏
  6. python怎么另起一行阅读答案_使用Python+Dlib构建人脸识别系统(在Nvidia Jetson Nano 2GB开发板上)...
  7. sql server2008用ip远程连接,解决默认连不上的问题
  8. openapi and light-4j
  9. 图解tcpip 第5版 pdf_16G906国标图集,装配式混凝土剪力墙结构住宅施工图解,PDF版...
  10. 苹果apple id无法申请开发者帐号问题
  11. 京东 区块链 JDChain
  12. mac 谷歌浏览器 跨域访问
  13. 进不去jetbrain官网怎么办
  14. linux平台MSG_OOB选项测试
  15. Vue+SpringBoot实现Excel在线预览功能(PS:添加样式比较费劲)
  16. 《用事实说话》阅读心得
  17. win7无法看到工作组计算机,Win7系统无法查看工作组问题的解决方法
  18. 浅聊Java反射机制(三)
  19. 【毕业设计_课程设计】基于协同过滤算法的个性化推荐系统(源码+论文)
  20. IDEA—Maven项目JDK版本设置

热门文章

  1. 机器学习学习笔记(三)之分类器
  2. 快手怎么引流最好?快手运营技巧,必掌握的几点你了解吗?
  3. 面向对象设计模式5大基本原则
  4. JAVA初学下(仅做笔记)
  5. Linux的系统安全及应用
  6. 主键索引和唯一索引的区别与创建规则
  7. [比赛简介]Parkinson‘s Freezing of Gait Prediction
  8. 利用“域名后缀”的漏洞劫持国家顶级域名(一)
  9. 回收苹果电脑需要注意哪些?
  10. 【win10】蓝牙连接音箱,只配对,没法连接成功