线段树节点维护区间最小值,查找时优先从左侧的区间寻找.

每一次循环都在树中不停寻找第一个小于等于当前持有数的值,然后抹去,直到找不到为止.

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<algorithm>
  4. #include<cstring>
  5. #define lson rt<<1
  6. #define rson rt<<1|1
  7. #define Lson l,m,lson
  8. #define Rson m+1,r,rson
  9. using namespace std;
  10. typedef long long LL;
  11. const int INF = 0x3f3f3f3f;
  12. const int maxn=1e5+5;
  13. int val[maxn];
  14. struct Node{
  15. int num;
  16. }tree[maxn<<2];
  17. int n;
  18. void pushup(int rt)
  19. {
  20. tree[rt].num = min(tree[lson].num,tree[rson].num);
  21. }
  22. void build(int l=1,int r=n,int rt=1)
  23. {
  24. if(l==r){
  25. tree[rt].num = val[l];
  26. return ;
  27. }
  28. int m = (l+r)>>1;
  29. build(Lson);
  30. build(Rson);
  31. pushup(rt);
  32. }
  33. bool flag;
  34. int query(int val,int l=1,int r=n,int rt=1)
  35. {
  36. int res=-1,m = (l+r)>>1;
  37. if(tree[rt].num<=val){
  38. if(l==r){
  39. int tmp = tree[rt].num;
  40. tree[rt].num = INF;
  41. return tmp;
  42. }
  43. res = query(val,Lson);
  44. if(res!=-1) {
  45. pushup(rt);
  46. return res;
  47. }
  48. res = query(val,Rson);
  49. if(res!=-1){
  50. pushup(rt);
  51. return res;
  52. }
  53. }
  54. return -1;
  55. }
  56. int ans1[maxn];
  57. int ans2[maxn];
  58. int main()
  59. {
  60. #ifndef ONLINE_JUDGE
  61. freopen("in.txt","r",stdin);
  62. freopen("out.txt","w",stdout);
  63. #endif
  64. int m,q;
  65. while(scanf("%d %d",&n,&m)==2){
  66. for(int i=1;i<=n;++i){
  67. scanf("%d",&val[i]);
  68. }
  69. build();
  70. flag = false;
  71. int sum = 0,tot=0;
  72. for(int i=1;i<=100000;++i){
  73. //cout<<tree[1].num<<endl;
  74. if(tree[1].num ==INF) flag = true;
  75. if(!flag) {
  76. sum += m;
  77. int tmp = query(sum);
  78. while(tmp!=-1){
  79. sum-=tmp;
  80. tot++;
  81. tmp = query(sum);
  82. }
  83. }
  84. ans1[i] = tot;
  85. ans2[i] = sum;
  86. }
  87. int id;
  88. scanf("%d",&q);
  89. for(int i=1;i<=q;++i){
  90. scanf("%d",&id);
  91. printf("%d %d\n",ans1[id],ans2[id]);
  92. }
  93. }
  94. return 0;
  95. }

ACM-ICPC 2018 南京赛区网络预赛 G. Lpl and Energy-saving Lamps (弱线段树)的更多相关文章

  1. ACM-ICPC 2018 南京赛区网络预赛 G Lpl and Energy-saving Lamps(线段树)

    题目链接:https://nanti.jisuanke.com/t/30996 中文题目: 在喝茶的过程中,公主,除其他外,问为什么这样一个善良可爱的龙在城堡里被监禁Lpl?龙神秘地笑了笑,回答说这是 ...

  2. ACM-ICPC 2018 南京赛区网络预赛 G Lpl and Energy-saving Lamps(模拟+线段树)

    https://nanti.jisuanke.com/t/30996 题意 每天增加m个灯泡,n个房间,能一次性换就换,模拟换灯泡过程.询问第几天的状态 分析 离线做,按题意模拟.比赛时线段树写挫了. ...

  3. ACM-ICPC 2018 南京赛区网络预赛 G. Lpl and Energy-saving Lamps(二分+线段树区间最小)

    During tea-drinking, princess, amongst other things, asked why has such a good-natured and cute Drag ...

  4. 计蒜客 30996.Lpl and Energy-saving Lamps-线段树(区间满足条件最靠左的值) (ACM-ICPC 2018 南京赛区网络预赛 G)

    G. Lpl and Energy-saving Lamps 42.07% 1000ms 65536K   During tea-drinking, princess, amongst other t ...

  5. ACM-ICPC 2018 南京赛区网络预赛 I Skr (马拉车+hash去重)或(回文树)

    https://nanti.jisuanke.com/t/30998 题意 给一串由0..9组成的数字字符串,求所有不同回文串的权值和.比如说“1121”这个串中有“1”,“2”,“11”,“121” ...

  6. ACM-ICPC 2018 徐州赛区网络预赛 G. Trace (思维,贪心)

    ACM-ICPC 2018 徐州赛区网络预赛 G. Trace (思维,贪心) Trace 问答问题反馈 只看题面 35.78% 1000ms 262144K There's a beach in t ...

  7. ACM-ICPC 2018 南京赛区网络预赛(12/12)

    ACM-ICPC 2018 南京赛区网络预赛 A. An Olympian Math Problem 计算\(\sum_{i=1}^{n-1}i\cdot i!(MOD\ n)\) \(\sum_{i ...

  8. ACM-ICPC 2018 南京赛区网络预赛 J.sum

    A square-free integer is an integer which is indivisible by any square number except 11. For example ...

  9. ACM-ICPC 2018 南京赛区网络预赛 E题

    ACM-ICPC 2018 南京赛区网络预赛 E题 题目链接: https://nanti.jisuanke.com/t/30994 Dlsj is competing in a contest wi ...

随机推荐

  1. WPF DataGrid DataGridTemplateColumn 控制模板中控件

    <DataGrid Name="DG">                <DataGrid.Columns>                    < ...

  2. CImage类提供了GetBits()函数原理及实现

    CImage类提供了GetBits()函数来读取数据区,GetBits()函数返回的是图片最后一行第一个像素的地址,网上有人说返回指针的起始位置是不同的,有些图片返回的是左上角像素的地址,有些是左下角 ...

  3. iOS-多线程的底层实现

    (1)首先回答什么是线程 1个进程要想执行任务,必须得有线程.线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行 (2)什么是多线程 1个进程中可以开启多条线程,每条线程可以并行(同时 ...

  4. 从远程(包括ftp,http等协议)地址获取文件流信息

    URL url = new URL("ftp://172.18.251.155:8010/recordsImg/2019-01-28/000008_1548649813267.jpg&quo ...

  5. 在Eclipse中显示.project和.classpath和.setting目录

    在Eclipse中显示.project, .classpath, .gitignore文件和.setting文件夹 在Eclipse中使用git,并显示.gitigonre文件,进行项目管理 在Ecl ...

  6. 【BZOJ4819】[Sdoi2017]新生舞会 01分数规划+费用流

    [BZOJ4819][Sdoi2017]新生舞会 Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会 买一个男生和一个女 ...

  7. NIO概览

    NIO专题:http://developer.51cto.com/art/201112/307172.htm 一.新IO概述: 新IO和传统IO都是用于进行输入/输出,相比于传统IO面向流的处理方式, ...

  8. DOS和BAT批量提取修改文件名

    DOS命令窗口:开始-cmd-回车,进入DOS命令窗口 案例一.获取文件名 dir 1.输入"文件所在盘",回车,如: d: 2.输入"cd 文件夹位置",回车 ...

  9. win10系统下把Oracle卸载干净

    我和大家一样,遇到了一个问题,就是如何把Oracle从自己的电脑卸载干净,很多人都觉得很难把Oracle卸载干净,于是选择重装系统,因为解决不了Oracle没有卸载干净之后,重装不了的问题,有时候真的 ...

  10. web.xml 中以编码方式添加filter并设置初始化参数AbstractAnnotationConfigDispatchServletInitializer

    web.xml中配置filter <?xml version="1.0" encoding="UTF-8"?> <web-app versio ...