2018年牛客网NOIP赛前训练营游记

提高组(第一场)

中位数

  1. #include<cstdio>
  2. #include<cctype>
  3. #include<climits>
  4. #include<algorithm>
  5. inline int getint() {
  6. register char ch;
  7. while(!isdigit(ch=getchar()));
  8. register int x=ch^'0';
  9. while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
  10. return x;
  11. }
  12. const int N=1e5+1;
  13. int n,len,a[N],tmp[N],b[N];
  14. inline bool check(const int &k) {
  15. for(register int i=1;i<=n;i++) {
  16. b[i]=b[i-1]+(a[i]<k?-1:1);
  17. }
  18. int min=INT_MAX;
  19. for(register int i=len;i<=n;i++) {
  20. min=std::min(min,b[i-len]);
  21. if(b[i]-min>0) return true;
  22. }
  23. return false;
  24. }
  25. int main() {
  26. n=getint(),len=getint();
  27. for(register int i=1;i<=n;i++) {
  28. tmp[i]=a[i]=getint();
  29. }
  30. std::sort(&tmp[1],&tmp[n]+1);
  31. tmp[0]=std::unique(&tmp[1],&tmp[n]+1)-&tmp[1];
  32. for(register int i=1;i<=n;i++) {
  33. a[i]=std::lower_bound(&tmp[1],&tmp[tmp[0]]+1,a[i])-tmp;
  34. }
  35. int l=2,r=tmp[0];
  36. while(l<=r) {
  37. const int mid=(l+r)>>1;
  38. if(check(mid)) {
  39. l=mid+1;
  40. } else {
  41. r=mid-1;
  42. }
  43. }
  44. printf("%d\n",tmp[l-1]);
  45. return 0;
  46. }

保护

  1. #include<cstdio>
  2. #include<cctype>
  3. #include<vector>
  4. inline int getint() {
  5. register char ch;
  6. while(!isdigit(ch=getchar()));
  7. register int x=ch^'0';
  8. while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
  9. return x;
  10. }
  11. const int N=2e5+1,logN=20;
  12. struct Node {
  13. int k,id;
  14. };
  15. std::vector<int> e[N];
  16. std::vector<Node> q[N];
  17. inline void add_edge(const int &u,const int &v) {
  18. e[u].push_back(v);
  19. e[v].push_back(u);
  20. }
  21. int n,anc[N][logN],dep[N],dfn[N],id[N],ans[N];
  22. inline int lg2(const float &x) {
  23. return ((unsigned&)x>>23&255)-127;
  24. }
  25. void dfs(const int &x,const int &par) {
  26. anc[x][0]=par;
  27. dep[x]=dep[par]+1;
  28. dfn[x]=++dfn[0];
  29. id[dfn[x]]=x;
  30. for(register int i=1;i<=lg2(dep[x]);i++) {
  31. anc[x][i]=anc[anc[x][i-1]][i-1];
  32. }
  33. for(auto &y:e[x]) {
  34. if(y!=par) dfs(y,x);
  35. }
  36. }
  37. inline int lca(int x,int y) {
  38. if(dep[x]<dep[y]) std::swap(x,y);
  39. for(register int i=lg2(dep[x]-dep[y]);i>=0;i--) {
  40. if(dep[anc[x][i]]>=dep[y]) x=anc[x][i];
  41. }
  42. for(register int i=lg2(dep[x]);i>=0;i--) {
  43. if(anc[x][i]!=anc[y][i]) {
  44. x=anc[x][i];
  45. y=anc[y][i];
  46. }
  47. }
  48. return x==y?x:anc[x][0];
  49. }
  50. class SegmentTree {
  51. #define mid ((b+e)>>1)
  52. private:
  53. struct Node {
  54. int val,left,right;
  55. };
  56. Node node[N*logN*2];
  57. int sz;
  58. int new_node() {
  59. return ++sz;
  60. }
  61. public:
  62. int root[N];
  63. void insert(int &p,const int &b,const int &e,const int &x) {
  64. if(!p) p=new_node();
  65. node[p].val++;
  66. if(b==e) return;
  67. if(x<=mid) insert(node[p].left,b,mid,x);
  68. if(x>mid) insert(node[p].right,mid+1,e,x);
  69. }
  70. void merge(int &p,int &q,const int &b,const int &e) {
  71. if(!p) {
  72. p=q;
  73. return;
  74. }
  75. if(!q) return;
  76. node[p].val+=node[q].val;
  77. if(b==e) return;
  78. merge(node[p].left,node[q].left,b,mid);
  79. merge(node[p].right,node[q].right,mid+1,e);
  80. }
  81. int query(const int &p,const int &b,const int &e,const int &k) const {
  82. if(node[p].val<k) return 0;
  83. if(b==e) return id[b];
  84. const int &tmp=node[node[p].left].val;
  85. if(tmp>=k) return query(node[p].left,b,mid,k);
  86. return query(node[p].right,mid+1,e,k-tmp);
  87. }
  88. #undef mid
  89. };
  90. SegmentTree t;
  91. void dfs(const int &x) {
  92. for(auto &y:e[x]) {
  93. if(y==anc[x][0]) continue;
  94. dfs(y);
  95. t.merge(t.root[x],t.root[y],1,n);
  96. }
  97. for(auto &p:q[x]) {
  98. const int &k=p.k,&id=p.id;
  99. const int tmp=t.query(t.root[x],1,n,k);
  100. ans[id]=(tmp&&dep[tmp]<dep[x])?dep[x]-dep[tmp]:0;
  101. }
  102. }
  103. int main() {
  104. n=getint();
  105. const int m=getint();
  106. for(register int i=1;i<n;i++) {
  107. add_edge(getint(),getint());
  108. }
  109. dfs(1,0);
  110. for(register int i=0;i<m;i++) {
  111. const int u=getint(),v=getint(),p=lca(u,v);
  112. t.insert(t.root[u],1,n,dfn[p]);
  113. t.insert(t.root[v],1,n,dfn[p]);
  114. }
  115. const int c=getint();
  116. for(register int i=0;i<c;i++) {
  117. const int x=getint(),k=getint();
  118. q[x].push_back((Node){k,i});
  119. }
  120. dfs(1);
  121. for(register int i=0;i<c;i++) {
  122. printf("%d\n",ans[i]);
  123. }
  124. return 0;
  125. }

2018年牛客网NOIP赛前训练营游记的更多相关文章

  1. 牛客网NOIP赛前集训营-提高组(第四场)游记

    牛客网NOIP赛前集训营-提高组(第四场)游记 动态点分治 题目大意: \(T(t\le10000)\)组询问,求\([l,r]\)中\(k(l,r,k<2^{63})\)的非负整数次幂的数的个 ...

  2. 牛客网NOIP赛前集训营-提高组(第四场)B区间

    牛客网NOIP赛前集训营-提高组(第四场)B区间 题目描述 给出一个序列$ a_1  \dots   a_n$. 定义一个区间 \([l,r]\) 是好的,当且仅当这个区间中存在一个 \(i\),使得 ...

  3. 牛客网NOIP赛前集训营-提高组(第四场)B题 区间

    牛客网NOIP赛前集训营-提高组(第四场) 题目描述 给出一个序列 a1, ..., an. 定义一个区间 [l,r] 是好的,当且仅当这个区间中存在一个 i,使得 ai 恰好等于 al, al+1, ...

  4. 牛客网NOIP赛前集训营-普及组(第二场)和 牛客网NOIP赛前集训营-提高组(第二场)解题报告

    目录 牛客网NOIP赛前集训营-普及组(第二场) A 你好诶加币 B 最后一次 C 选择颜色 D 合法括号序列 牛客网NOIP赛前集训营-提高组(第二场) A 方差 B 分糖果 C 集合划分 牛客网N ...

  5. 牛客网NOIP赛前集训营-提高组18/9/9 A-中位数

    链接:https://www.nowcoder.com/acm/contest/172/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  6. 牛客网NOIP赛前集训营-提高组(第二场)A 方差

    链接:https://www.nowcoder.com/acm/contest/173/A来源:牛客网 题目描述 一个长度为 m 的序列 b[1...m] ,我们定义它的方差为 ,其中  表示序列的平 ...

  7. 牛客网NOIP赛前集训营-提高组(第八场)

    染色 链接:https://ac.nowcoder.com/acm/contest/176/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他语言10 ...

  8. 牛客网NOIP赛前集训营 提高组(第七场)

    中国式家长 2 链接:https://www.nowcoder.com/acm/contest/179/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K, ...

  9. [牛客网NOIP赛前集训营-普及组(第二场)]D-合法括号序列

    链接:https://www.nowcoder.com/acm/contest/165/D来源:牛客网 合法括号序列 键盘上有左括号(,右括号),和退格键-,共三个键. 牛牛希望按键n次,使得输入的字 ...

随机推荐

  1. angularJs的各种服务和指令的使用场景

    $location服务,获取页面跳转带的参数 比如说页面是这样的  localhost:9102/admin/goods.html#?id=123   如何获取这个id=123的值呢?????(注意: ...

  2. vue ssr服务端渲染

    SSR:Server Side Rendering(服务端渲染) 目的是为了解决单页面应用的 SEO 的问题,对于一般网站影响不大,但是对于论坛类,内容类网站来说是致命的,搜索引擎无法抓取页面相关内容 ...

  3. spring JMS在接收消息的时候总是报错

    spring JMS在接收消息的时候总是报错 org.springframework.jms.UncategorizedJmsException: Uncategorized exception oc ...

  4. 用代码块在new对象时set属性

    看到这样一种用法,很方便 request.setRequestHead(new RequestHeadType() {{ setRequestor("Online"); setRe ...

  5. bzoj千题计划212:bzoj1864: [Zjoi2006]三色二叉树

    http://www.lydsy.com/JudgeOnline/problem.php?id=1864 #include<cstdio> #include<cstring> ...

  6. 自定义泛型_无多态_通配符无泛型数组_jdk7泛型使用

    通配符 T, K, V, E 等泛型字母为有类型, 类型参数赋予具体的值 ? 未知类型 类型参数赋予不确定值, 任意类型 只能用在 声明类型上,方法参数上, 不能用在定义泛型类上 上限 extends ...

  7. Mybatis 使用 mapper 接口规范的 一对一, 一对多,多对多映射

    首先的 是 最原始的 pojo 类来 做简单映射 简单 pojo 映射: <mapper namespace="com.ghc.dao.UserDao"> <se ...

  8. dialog 菜单

    dialog 菜单 # 默认将所有输出用 stderr 输出,不显示到屏幕 使用参数 --stdout 可将选择赋给变量 # 退出状态 0正确 1错误 窗体类型 --calendar # 日历 --c ...

  9. 02 workerman之GatewayWorker简单的demo 实现两端发送消息

    前端代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <t ...

  10. 【Python】使用Python将Shellcode转换成汇编

    1.介绍 需要多少行代码转换hex成反汇编呢? 多亏了Python的Capstone库,做这件事只需要五行. 在二进制分析中,进行Exploit开发或逆向工程时,需要快速将十六进制的Shellcode ...