codeforces 272C. Dima and Staircase(线段树)

举报
xindoo 发表于 2022/04/16 02:27:07 2022/04/16
【摘要】 题目链接     题目很长,看加猜加谷歌翻译才看懂了题目。每级台阶的宽都是1,但高不同,并且告诉你了,然后给你m个箱子,长和宽都告诉你,把箱子靠左放,求箱子的底部有多高。    因为都是放在最左边的,所以只要和最左边的高度比较,这样就不用更新线段树了。 代码: //cf 272 C...

题目链接

    题目很长,看加猜加谷歌翻译才看懂了题目。每级台阶的宽都是1,但高不同,并且告诉你了,然后给你m个箱子,长和宽都告诉你,把箱子靠左放,求箱子的底部有多高。


   因为都是放在最左边的,所以只要和最左边的高度比较,这样就不用更新线段树了。

代码:


  
  1. //cf 272 C
  2. //2013-05-14-20.26
  3. #include <stdio.h>
  4. using namespace std;
  5. const int maxn = 100005;
  6. struct node
  7. {
  8. int l, r, mid;
  9. __int64 m;
  10. }tree[maxn<<2];
  11. __int64 a[maxn];
  12. __int64 max(__int64 a, __int64 b)
  13. {
  14. if (a > b)
  15. return a;
  16. return b;
  17. }
  18. void build(int l, int r, int o)
  19. {
  20. tree[o].l = l;
  21. tree[o].r = r;
  22. int mid = (l+r)>>1;
  23. tree[o].mid = mid;
  24. if (l == r)
  25. {
  26. tree[o].m = a[l];
  27. return ;
  28. }
  29. build(l, mid, o<<1);
  30. build(mid+1, r, (o<<1)+1);
  31. tree[o].m = max(tree[o<<1].m, tree[(o<<1)+1].m);
  32. }
  33. int query(int l, int r, int o)
  34. {
  35. if (l == tree[o].l && tree[o].r == r)
  36. return tree[o].m;
  37. if (r <= tree[o].mid)
  38. return query(l, r, o<<1);
  39. else if (l > tree[o].mid)
  40. return query(l, r, (o<<1)+1);
  41. else
  42. return max(query(l, tree[o].mid, o<<1), query(tree[o].mid+1, r, (o<<1)+1));
  43. }
  44. int main()
  45. {
  46. int n, m;
  47. while (scanf("%d", &n) != EOF)
  48. {
  49. for (int i = 1; i <= n; i++)
  50. {
  51. scanf("%I64d", &a[i]);
  52. }
  53. build(1, n, 1);
  54. __int64 high = a[1];
  55. scanf("%d", &m);
  56. __int64 w, h;
  57. while (m--)
  58. {
  59. scanf("%I64d %I64d", &w, &h);
  60. printf("%I64d\n", max(query(1, w, 1), high));
  61. high = max(query(1, w, 1), high) + h;
  62. }
  63. }
  64. return 0;
  65. }






文章来源: xindoo.blog.csdn.net,作者:xindoo,版权归原作者所有,如需转载,请联系作者。

原文链接:xindoo.blog.csdn.net/article/details/8927545

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。