题意:有两种操作,第一种从A开始插花,如果有花就跳到下一个,然后输出最后一个花瓶的编号,如果花瓶不够把多余的花丢掉。操作2把区间清空
分析:很明显的线段树操作,就是插花的时候麻烦一下,需要先找出来他剩余的花瓶数,要不没办法更新。
*******************************************************************
  1. #include<algorithm>
  2. #include<stdio.h>
  3. using namespace std;
  4.  
  5. #define lson r<<1
  6. #define rson r<<1|1
  7.  
  8. const int MAXN = 1e5+;
  9.  
  10. struct stgmentTree
  11. {//sum花瓶的剩余量
  12.     int x, y, sum, cover;//cover, 操作1赋值为释放花瓶,操作2沾满花瓶
  13.     int mid(){return (x+y)>>;}
  14.     int len(){return y-x+;}
  15. }a[MAXN<<];
  16. int ans;
  17. void Build(int r, int x, int y)
  18. {
  19.     a[r].= x, a[r].= y;
  20.     a[r].sum = a[r].len(), a[r].cover = ;
  21.  
  22.     if(== y)
  23.         return ;
  24.  
  25.     Build(lson, x, a[r].mid());
  26.     Build(rson, a[r].mid()+, y);
  27. }
  28. void Down(int r)
  29. {
  30.     if(a[r].!= a[r].&& a[r].cover)
  31.     {
  32.         a[lson].cover = a[rson].cover = a[r].cover;
  33.         a[lson].sum = a[r].cover== ?  : a[lson].len();
  34.         a[rson].sum = a[r].cover== ?  : a[rson].len();
  35.  
  36.         a[r].cover = ;
  37.     }
  38. }
  39. void Insert(int r, int x, int y, int op)
  40. {
  41.     if(a[r].== x && a[r].== y)
  42.     {
  43.         ans += a[r].len()-a[r].sum;
  44.         a[r].cover = op;
  45.         a[r].sum = (op== ?  : a[r].len());
  46.  
  47.         return ;
  48.     }
  49.  
  50.     Down(r);
  51.  
  52.     if(<= a[r].mid())
  53.         Insert(lson, x, y, op);
  54.     else if(> a[r].mid())
  55.         Insert(rson, x, y, op);
  56.     else
  57.     {
  58.         Insert(lson, x, a[r].mid(), op);
  59.         Insert(rson, a[r].mid()+, y, op);
  60.     }
  61.  
  62.     a[r].sum  = a[rson].sum + a[lson].sum;
  63. }
  64. int QueryPreSum(int r, int k)//求k前面的空花瓶数
  65. {
  66.     Down(r);
  67.  
  68.     if(a[r].== a[r].y)
  69.         return ;
  70.     if(<= a[r].mid())
  71.         return QueryPreSum(lson, k);
  72.     else
  73.         return a[lson].sum + QueryPreSum(rson, k);
  74. }
  75. int QueryLast(int r, int p)//查找第p个花瓶位置
  76. {
  77.     Down(r);
  78.  
  79.     if(a[r].== a[r].y)
  80.         return a[r].x;
  81.  
  82.     if(a[lson].sum >= p)
  83.         return QueryLast(lson, p);
  84.     else
  85.         return QueryLast(rson, p-a[lson].sum);
  86. }
  87.  
  88. int main()
  89. {
  90.     int T;
  91.  
  92.     scanf("%d", &T);
  93.  
  94.     while(T--)
  95.     {
  96.         int N, M, op, x, y, L, R;
  97.  
  98.         scanf("%d%d", &N, &M);
  99.  
  100.         Build(, , N-);
  101.  
  102.         while(M--)
  103.         {
  104.             scanf("%d%d%d", &op, &x, &y);
  105.             if(op == )
  106.             {
  107.                 int PreSum = QueryPreSum(, x);
  108.  
  109.                 if(PreSum == a[].sum)
  110.                     printf("Can not put any one.\n");
  111.                 else
  112.                 {
  113.                     L = QueryLast(, PreSum+);
  114.  
  115.                     if(PreSum+>= a[].sum)
  116.                         PreSum = a[].sum;
  117.                     else
  118.                         PreSum += y;
  119.                     R = QueryLast(, PreSum);
  120.  
  121.                     Insert(, L, R, );
  122.  
  123.                     printf("%d %d\n", L, R);
  124.                 }
  125.             }
  126.             else
  127.             {
  128.                 ans = ;
  129.                 Insert(, x, y, );
  130.                 printf("%d\n", ans);
  131.             }
  132.         }
  133.  
  134.         printf("\n");
  135.     }
  136.  
  137.     return ;
  138. }
  139. /*
  140. 2
  141. 10 8
  142. 1 2 5
  143. 2 3 4
  144. 1 0 8
  145. 2 2 5
  146. 1 6 1
  147. 1 4 4
  148. 1 2 3

*/

L - Vases and Flowers - hdu 4614(区间操作)的更多相关文章

  1. L - Vases and Flowers HDU - 4614 线段树+二分

    题意 给出一排空花瓶 有两种操作  1是 从A花瓶开始放F朵花 如果当前瓶有花就跳过前往下一个 直到花用完或者 瓶子到了最后一个为止 输出 成功放花的第一个和最后一个  如果没有输出 can not. ...

  2. HDU-4614 Vases and Flowers 线段树区间更新

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4614 线段树保存区间是否被覆盖以及区间的和即可,在询问的时候在线段树上二分查找就可以了...代码写得比 ...

  3. 【HDU 4614】Vases and Flowers(线段树区间更新懒惰标记)

    题目0到n-1的花瓶,操作1在下标a开始插b朵花,输出始末下标.操作2清空[a,b]的花瓶,求清除的花的数量.线段树懒惰标记来更新区间.操作1,先查询0到a-1有num个空瓶子,然后用线段树的性质,或 ...

  4. 2013 多校联合2 D Vases and Flowers (hdu 4614)

    Vases and Flowers Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others ...

  5. HDU 4614 Vases and Flowers(线段树+二分)

    Vases and Flowers Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others ...

  6. HDU 4614 Vases and Flowers (2013多校2 1004 线段树)

    Vases and Flowers Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others ...

  7. HDU-4614 Vases and Flowers(线段树区间更新+二分查找)

    http://acm.hdu.edu.cn/showproblem.php?pid=4614 Time Limit: 4000/2000 MS (Java/Others)    Memory Limi ...

  8. HDU 4578——Transformation——————【线段树区间操作、确定操作顺序】

    Transformation Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 65535/65536 K (Java/Others)T ...

  9. HDU 1754 I Hate It (Splay 区间操作)

    题目大意 维护一个序列,支持两种操作 操作一:将第x个元素的值修改为y 操作二:询问区间[x,y]内的元素的最大值 解题分析 splay的区间操作,事先加入两个编号最小和最大的点防止操作越界. 具体的 ...

随机推荐

  1. Activity的任务栈Task以及启动模式与Intent的Flag详解

    什么是任务栈(Task) 官方文档是这么解释的 任务是指在执行特定作业时与用户交互的一系列 Activity. 这些 Activity 按照各自的打开顺序排列在堆栈(即“返回栈”)中. 其实就是以栈的 ...

  2. ansible小结

    一.Ansible的安装 1.yum源安装 以centos为例,默认在源里没有ansible,不过在fedora epel源里有ansible,配置完epel 源后,可以直接通过yum 进行安装.这里 ...

  3. python 全栈开发之路 day1

    python 全栈开发之路 day1   本节内容 计算机发展介绍 计算机硬件组成 计算机基本原理 计算机 计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可 ...

  4. C#学习第三天

    经过这几天的学习,真的有点觉得以前C学的太不好现在学C#也不顺畅,虽然很多东西都似曾相识,但是就是还得看好几遍才能记得住,而且现在都是简单的东西,还没有看到重载等稍微难点的地方.应该好好努力了,昨天忙 ...

  5. Spring.Net+NHibernate+asp.net mvc + easyui

    毕业4个月的入手项目..前段时间在公司一直做的维护..为了弄明白自己也就跟着写了一个,目前也正在学习:不对的或者是有更好的还请各位赐教. 在学习的过程中主要参考::http://www.cnblogs ...

  6. sql的一些小东西

    1.sa账户密码丢失. 先用wiondows验证登陆,然后新建查询 “ ALTER LOGIN [sa] WITH PASSWORD = N'NewPassword' ”

  7. spring aop pointcut 切入点是类的公共方法(私有方法不行),还是接口的方法

    spring aop pointcut 切入点是类的公共方法(私有方法不行),还是接口的方法 类的公共方法可以,但是私有方法不行 测试一下接口的方法是否能够捕捉到

  8. Wpf控件ListBox使用实例2

    2.Xaml绑定选择结果 <StackPanel Orientation="Vertical"> <TextBlock Margin="10,10,10 ...

  9. ManagementException:WMI异常处理介绍

    .NET调用WMI后无论是同步调用还是异步调用,都会产生返回一个int类型的执行结果.如果成功,则返回0.如果不是0,则有对应错误码表示发生了什么错误. 根据咱们这个系列的博文,我总结了关于进程,服务 ...

  10. (转)如何将ecshop首页主广告位的flash轮播替换为js轮播

    转之--http://www.ecshoptemplate.com/article-1710.html 这个ecshop很常见,因为现在比起flash难以修改,js更加符合人们的使用习惯,而默认ecs ...