题意:给定一个初始数组b和一个初始值全部为0的数组a,每次操作可以在给定的区间(l,r)内让a[i](l=<i<=r)加一,或者查询区间区间(l,r)中a[i]/b[i](l=<i<=r)(取整)的和。
可以知道,$\sum_{\frac{a_i}{b_i}}\le nlogn$,所以我们只要暴力找到需要修改的位置修改即可。。
代码:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #define M 100010
  5. #define ls node<<1
  6. #define rs node<<1|1
  7. using namespace std;
  8. int n,q;
  9. int maxn[M<<],minn[M<<],cnt[M<<],tag[M<<],b[M];
  10.  
  11. void update(int node)
  12. {
  13. minn[node]=min(minn[ls],minn[rs]);
  14. cnt[node]=cnt[ls]+cnt[rs];
  15. maxn[node]=max(maxn[ls],maxn[rs]);
  16. }
  17.  
  18. void build(int node,int l,int r)
  19. {
  20. if(l==r) {minn[node]=b[l];return;}
  21. int mid=(l+r)/;
  22. build(ls,l,mid);
  23. build(rs,mid+,r);
  24. update(node);
  25. }
  26.  
  27. void push(int node)
  28. {
  29. if(tag[node])
  30. {
  31. maxn[ls]+=tag[node];
  32. maxn[rs]+=tag[node];
  33. tag[ls]+=tag[node];
  34. tag[rs]+=tag[node];
  35. tag[node]=;
  36. }
  37. }
  38.  
  39. void change(int node,int l,int r,int l1,int r1)
  40. {
  41. if(l1<=l&&r1>=r)
  42. {
  43. maxn[node]++;
  44. if(maxn[node]<minn[node])
  45. {
  46. tag[node]++;
  47. return;
  48. }
  49. if(l==r&&maxn[node]>=minn[node])
  50. {
  51. cnt[node]++;
  52. minn[node]+=b[l];
  53. return;
  54. }
  55. }
  56. int mid=(l+r)/;push(node);
  57. if(l1<=mid) change(ls,l,mid,l1,r1);
  58. if(r1>mid) change(rs,mid+,r,l1,r1);
  59. update(node);
  60. }
  61.  
  62. int query(int node,int l,int r,int l1,int r1)
  63. {
  64. if(l1<=l&&r1>=r) return cnt[node];
  65. int mid=(l+r)/; push(node);
  66. int ans=;
  67. if(l1<=mid) ans+=query(ls,l,mid,l1,r1);
  68. if(r1>mid) ans+=query(rs,mid+,r,l1,r1);
  69. return ans;
  70. }
  71.  
  72. int main()
  73. {
  74. while(~scanf("%d%d",&n,&q))
  75. {
  76. memset(maxn,,sizeof(maxn));
  77. memset(minn,,sizeof(minn));
  78. memset(cnt,,sizeof(cnt));
  79. memset(tag,,sizeof(tag));
  80. for(int i=;i<=n;i++) scanf("%d",&b[i]);
  81. build(,,n);
  82. while(q--)
  83. {
  84. int l,r;char s[];
  85. scanf("%s%d%d",s,&l,&r);
  86. if(s[]=='a') change(,,n,l,r);
  87. else printf("%d\n",query(,,n,l,r));
  88. }
  89. }
  90. return ;
  91. }

[Hdu6315]Naive Operations的更多相关文章

  1. HDU6315 Naive Operations(多校第二场1007)(线段树)

    Naive Operations Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 502768/502768 K (Java/Other ...

  2. HDU-6315 Naive Operations//2018 Multi-University Training Contest 2___1007 (线段树,区间除法)

    原题地址 Naive Operations Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 502768/502768 K (Java/ ...

  3. [HDU6315]Naive Operations(线段树+树状数组)

    构造一个序列B[i]=-b[i],建一颗线段树,维护区间max, 每次区间加后再询问该区间最大值,如果为0就在树状数组中对应的值+1(该操作可能进行多次) 答案在树状数组中找 其实只用一颗线段树也是可 ...

  4. HDU6315 Naive Operations(线段树 复杂度分析)

    题意 题目链接 Sol 这题关键是注意到题目中的\(b\)是个排列 那么最终的答案最多是\(nlogn\)(调和级数) 设\(d_i\)表示\(i\)号节点还需要加\(d_i\)次才能产生\(1\)的 ...

  5. HDU6315 Naive Operations 线段树

    目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog Problem:Portal传送门  原题目描述在最下面. Solution ...

  6. HDU-6315:Naive Operations(线段树+思维)

    链接:HDU-6315:Naive Operations 题意: In a galaxy far, far away, there are two integer sequence a and b o ...

  7. HDU 6351 Naive Operations(线段树)

    题目: http://acm.hdu.edu.cn/showproblem.php?pid=6315 Naive Operations Time Limit: 6000/3000 MS (Java/O ...

  8. hdu 6315 Naive Operations (2018 Multi-University Training Contest 2 1007)

    Naive Operations Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 502768/502768 K (Java/Other ...

  9. hdu Naive Operations 线段树

    题目大意 题目链接Naive Operations 题目大意: 区间加1(在a数组中) 区间求ai/bi的和 ai初值全部为0,bi给出,且为n的排列,多组数据(<=5),n,q<=1e5 ...

随机推荐

  1. git学习(4)远程库和分支管理

    git学习(4)远程库和分支管理 1.1建立本地git库和远程库联系 我使用的是GitHub上的库,首先在GitHub上新建一个库,在建立与远程库的联系之前需要建立ssh key.建立ssh key可 ...

  2. 数据结构(java语言描述)

    概念性描述与<数据结构实例教程>大同小异,具体参考:http://www.cnblogs.com/bookwed/p/6763300.html. 概述 基本概念及术语 数据 信息的载体,是 ...

  3. Exception in thread "main" java.lang.UnsupportedClassVersionError: * : Unsupported major.minor version 52.0 解决办法

    Exception in thread "main" java.lang.UnsupportedClassVersionError: * : Unsupported major.m ...

  4. Zipline Development Guidelines

    Development Guidelines This page is intended for developers of Zipline, people who want to contribut ...

  5. python pip命令技巧

    确保本地开发环境,和线上一致性 1.导出当前解释器的模块pip3 freeze > requirements.txt 2.将这个文件requirements.txt,上传至服务器,在新的虚拟环境 ...

  6. Mysql索引长度和区分度

    首先  索引长度和区分度是相互矛盾的, 索引长度太短,那么区分度就很低,吧索引长度加长,区分度就高,但是索引也是要占内存的,所以我们需要找到一个平衡点: 那么这个平衡点怎么来定? 比如用户表有个字段 ...

  7. Python3 格式化输出 %s & %d 等

    1.打印字符串 print("My name is %s" %("Alfred.Xue")) #输出效果:My name is Alfred.Xue 2.打印整 ...

  8. 《闪存问题之READ DISTURB》总结

    来自 http://www.ssdfans.com/?p=1778 闪存存在几个问题,影响着数据可靠性: 1.擦除次数,闪存擦除次数增多,会使隔离栅极的电化学键变弱. 2.data retention ...

  9. HDU2425:Hiking Trip(简单bfs,优先队列实现)

    题目: 传送门 题意很简单就不解释了,水题一道. #include <iostream> #include <string.h> #include <stdio.h> ...

  10. django内置 Contenttypes 框架

    一.什么是Django ContentTypes? 1.Django 包含一个ContentTypes 应用,它可以追踪安装在你的Django 项目里的所有应用,并提供一个高层次的.通用的接口用于与你 ...