http://acm.hdu.edu.cn/showproblem.php?pid=4614

线段树的各种操作 写的有点乱 求插入位置是以区间K值的方法求出的 向下更新

  1. #include <iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. #define N 50010
  7. int s[N<<],lz[N<<];
  8. void build(int l,int r,int w)
  9. {
  10. s[w] = r-l+;
  11. lz[w] = -;
  12. if(l==r)
  13. {
  14. s[w] = ;
  15. return ;
  16. }
  17. int m = (l+r)>>;
  18. build(l,m,w<<);
  19. build(m+,r,w<<|);
  20. }
  21. void pushup(int w)
  22. {
  23. s[w] = s[w<<]+s[w<<|];
  24. }
  25. void pushdown(int l,int r,int w)
  26. {
  27. int m = (l+r)/;
  28. if(lz[w]!=-)
  29. {
  30. lz[w<<] = lz[w<<|] = lz[w];
  31. if(lz[w])
  32. {
  33. s[w<<] = m-l+;
  34. s[w<<|] = r-m;
  35. }
  36. else
  37. s[w<<] = s[w<<|] = ;
  38. lz[w] = -;
  39. }
  40. }
  41. int query(int p,int l,int r,int w)
  42. {
  43. if(l==r)
  44. {
  45. return l;
  46. }
  47. pushdown(l,r,w);
  48. int m = (l+r)>>;
  49. if(p<=s[w<<])
  50. return query(p,l,m,w<<);
  51. else
  52. return query(p-s[w<<],m+,r,w<<|);
  53. }
  54. void update(int d,int a,int b,int l,int r,int w)
  55. {
  56. if(a<=l&&b>=r)
  57. {
  58. if(d)
  59. s[w] = r-l+;
  60. else
  61. s[w] = ;
  62. lz[w] = d;
  63. return ;
  64. }
  65. pushdown(l,r,w);
  66. int m = (l+r)>>;
  67. if(a<=m)
  68. update(d,a,b,l,m,w<<);
  69. if(b>m)
  70. update(d,a,b,m+,r,w<<|);
  71. pushup(w);
  72. }
  73. int add(int a,int b,int l,int r,int w)
  74. {
  75. if(a<=l&&b>=r)
  76. {
  77. return s[w];
  78. }
  79. pushdown(l,r,w);
  80. int m = (l+r)>>,re=;
  81. if(a<=m)
  82. re+=add(a,b,l,m,w<<);
  83. if(b>m)
  84. re+=add(a,b,m+,r,w<<|);
  85. return re;
  86. }
  87. int main()
  88. {
  89. int t,n,m,k;
  90. //freopen("1004.in","r",stdin);
  91. //freopen("aa.txt","w",stdout);
  92. cin>>t;
  93. while(t--)
  94. {
  95. scanf("%d%d",&n,&m);
  96. build(,n-,);
  97. while(m--)
  98. {
  99. int a,b;
  100. scanf("%d%d%d",&k,&a,&b);
  101. if(k==)
  102. {
  103. int ss;
  104. if(a>)
  105. ss = add(,a-,,n-,);
  106. else ss=;
  107. int x = query(ss+,,n-,);
  108. if(s[]-ss<b)
  109. b = s[]-ss;
  110. int y = query(ss+b,,n-,);
  111. if(ss==s[])
  112. printf("Can not put any one.\n");
  113. else
  114. {printf("%d %d\n",x,y);
  115. update(,x,y,,n-,);
  116. }
  117. }
  118. else
  119. {
  120. int sx = add(a,b,,n-,);
  121. //cout<<sx<<" ,"<<endl;
  122.  
  123. if(b>n-)
  124. b = n-;
  125. printf("%d\n",b-a+-sx);
  126. update(,a,b,,n-,);
  127. }
  128. }
  129. puts("");
  130. }
  131. return ;
  132. }

hdu4614Vases and Flowers的更多相关文章

  1. hdu4614Vases and Flowers(线段树,段设置,更新时范围的右边值为变量)

    Problem Description Alice is so popular that she can receive many flowers everyday. She has N vases ...

  2. HDU4614Vases and Flowers 二分+线段树;

    参考:https://blog.csdn.net/ophunter_lcm/article/details/9879495   题意: 有n个花瓶,有两种操作,1.从a开始放b朵花,有花的花瓶跳过,2 ...

  3. CF451E Devu and Flowers (隔板法 容斥原理 Lucas定理 求逆元)

    Codeforces Round #258 (Div. 2) Devu and Flowers E. Devu and Flowers time limit per test 4 seconds me ...

  4. poj 3262 Protecting the Flowers

    http://poj.org/problem?id=3262 Protecting the Flowers Time Limit: 2000MS   Memory Limit: 65536K Tota ...

  5. Codeforces Round #381 (Div. 2)B. Alyona and flowers(水题)

    B. Alyona and flowers Problem Description: Let's define a subarray as a segment of consecutive flowe ...

  6. poj1157LITTLE SHOP OF FLOWERS

    Description You want to arrange the window of your flower shop in a most pleasant way. You have F bu ...

  7. CF459B Pashmak and Flowers (水

    Pashmak and Flowers Codeforces Round #261 (Div. 2) B. Pashmak and Flowers time limit per test 1 seco ...

  8. 线段树或树状数组---Flowers

    题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=4325 Description As is known to all, the blooming tim ...

  9. sgu 104 Little shop of flowers 解题报告及测试数据

    104. Little shop of flowers time limit per test: 0.25 sec. memory limit per test: 4096 KB 问题: 你想要将你的 ...

随机推荐

  1. 本地调试 Chrome支持Ajax跨域

    Ajax本身是不支持跨域的,跨域问题其实很简单,通过浏览器的相应设置可以完成两个不同的服务器或两个不同服务下的项目互相访问.希望大家给予评价及投票. 方法/步骤 1 首先谷歌快捷方式上右击,在下拉列表 ...

  2. PHP 跨域写cookie

    实际工作中,类似这样的要求很多,比如说,我们有两个域名,我们想实现在一个域名登录后,能自动完成另一个域名的登录,也就是PASSPORT的功能. 我只写一个大概,为了测试的方便,先编辑hosts文件,加 ...

  3. 手工添加Linux防火墙端口

    在linux实际操作中经常需要对防火墙进行修改,比如经常要修改或添加相关端口,下面以添加运行Tomcat所需8080端口为例: (以下命令操作均为root用户) 1.编辑iptables文件 # vi ...

  4. Django文档——Model字段类型(Field Types)

    大部分内容参考自http://wrongwaycn.github.io/django11/topics/db/models/index.html#topics-db-models ,内容是django ...

  5. fedora 禁止nouveau加载

    To remove / disable nouveau drivers from kernel initramfs ## Backup old initramfs nouveau image ## m ...

  6. install ruby and ruby gem

    sudo apt-get install ruby #find an folder and: git clone https://github.com/rubygems/rubygems.git cd ...

  7. JS创建类和对象

    JavaScript 创建类/对象的几种方式 在JS中,创建对象(Create Object)并不完全是我们时常说的创建类对象,JS中的对象强调的是一种复合类型,JS中创建对象及对对象的访问是极其灵活 ...

  8. IE 坑爹的浏览器兼容模式

    作为作为Web的前端开发人员,最悲催的莫过于要不断的,不断的去调试各种浏览器的显示效果,个人比较喜欢用火狐浏览器来做开发和调试,对于不怎么懂CSS的我来说,IE的样式调整一看就头大了.对于没有美工的团 ...

  9. Linux学习笔记(5)-进程管理

    进程简介 进程是正在执行的一个程序或命令,每一个进程都有自己的地址空间,并占有一定的系统资源.感性的认识,进程就是一个正在运行的程序 进程管理的作用 判断服务器的运行状态 查看系统中有哪些进程 杀死进 ...

  10. 1196: [HNOI2006]公路修建问题 - BZOJ

    Description OI island是一个非常漂亮的岛屿,自开发以来,到这儿来旅游的人很多.然而,由于该岛屿刚刚开发不久,所以那里的交通情况还是很糟糕.所以,OIER Association组织 ...