赶在期末考试之前把这道傻逼题调了出来。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #define maxn 100500
  6. using namespace std;
  7. long long n,m,a[maxn];
  8. long long root,tot=,ls[maxn<<],rs[maxn<<];
  9. long long lazy[maxn<<],add[maxn<<],sum[maxn<<],mi[maxn<<],mx[maxn<<];
  10. long long x,y,z;
  11. bool vis[maxn<<];
  12. void pushup(long long now)
  13. {
  14. sum[now]=sum[ls[now]]+sum[rs[now]];
  15. mx[now]=max(mx[ls[now]],mx[rs[now]]);
  16. mi[now]=min(mi[ls[now]],mi[rs[now]]);
  17. }
  18. void build(long long &now,long long left,long long right)
  19. {
  20. now=++tot;lazy[now]=;add[now]=;
  21. if (left==right)
  22. {
  23. sum[now]=mx[now]=mi[now]=a[left];
  24. return;
  25. }
  26. long long mid=(left+right)>>;
  27. build(ls[now],left,mid);
  28. build(rs[now],mid+,right);
  29. pushup(now);
  30. }
  31. void pushdown(long long now,long long left,long long right)
  32. {
  33. long long mid=(left+right)>>;
  34. if (vis[now]==true)
  35. {
  36. lazy[ls[now]]=lazy[rs[now]]=mx[ls[now]]=mx[rs[now]]=mi[ls[now]]=mi[rs[now]]=lazy[now];
  37. sum[ls[now]]=(mid-left+)*lazy[now];
  38. sum[rs[now]]=(right-mid)*lazy[now];
  39. lazy[now]=;vis[now]=false;vis[ls[now]]=vis[rs[now]]=true;
  40. add[ls[now]]=;add[rs[now]]=;
  41. }
  42. if (add[now]!=)
  43. {
  44. add[ls[now]]+=add[now];add[rs[now]]+=add[now];
  45. sum[ls[now]]+=(mid-left+)*add[now];
  46. sum[rs[now]]+=(right-mid)*add[now];
  47. mx[ls[now]]+=add[now];mx[rs[now]]+=add[now];
  48. mi[ls[now]]+=add[now];mi[rs[now]]+=add[now];
  49. add[now]=;
  50. }
  51. }
  52. void modify(long long now,long long left,long long right,long long l,long long r,long long p,long long type)
  53. {
  54. pushdown(now,left,right);
  55. if ((left==l) && (right==r))
  56. {
  57. if (type==)
  58. {
  59. add[now]+=p;sum[now]+=(right-left+)*p;mx[now]+=p;mi[now]+=p;
  60. return;
  61. }
  62. else
  63. {
  64. lazy[now]=p;add[now]=;sum[now]=p*(right-left+);
  65. mx[now]=mi[now]=p;vis[now]=true;
  66. return;
  67. }
  68. }
  69. long long mid=(left+right)>>;
  70. if (r<=mid) modify(ls[now],left,mid,l,r,p,type);
  71. else if (l>=mid+) modify(rs[now],mid+,right,l,r,p,type);
  72. else
  73. {
  74. modify(ls[now],left,mid,l,mid,p,type);
  75. modify(rs[now],mid+,right,mid+,r,p,type);
  76. }
  77. pushup(now);
  78. }
  79. long long ask(long long now,long long left,long long right,long long l,long long r,long long type)
  80. {
  81. pushdown(now,left,right);
  82. if ((left==l) && (right==r))
  83. {
  84. if (type==) return sum[now];
  85. else if (type==) return mx[now];
  86. else return mi[now];
  87. }
  88. long long mid=(left+right)>>;
  89. if (r<=mid) return ask(ls[now],left,mid,l,r,type);
  90. else if (l>=mid+) return ask(rs[now],mid+,right,l,r,type);
  91. else
  92. {
  93. if (type==)
  94. {
  95. long long regis1=ask(ls[now],left,mid,l,mid,type);
  96. long long regis2=ask(rs[now],mid+,right,mid+,r,type);
  97. return regis1+regis2;
  98. }
  99. else if (type==) return max(ask(ls[now],left,mid,l,mid,type),ask(rs[now],mid+,right,mid+,r,type));
  100. else return min(ask(ls[now],left,mid,l,mid,type),ask(rs[now],mid+,right,mid+,r,type));
  101. }
  102. }
  103. int main()
  104. {
  105. memset(vis,false,sizeof(vis));
  106. scanf("%lld%lld",&n,&m);
  107. for (long long i=;i<=n;i++)
  108. scanf("%lld",&a[i]);
  109. build(root,,n);
  110. for (long long i=;i<=m;i++)
  111. {
  112. char type[];
  113. scanf("%s",type);
  114. if (type[]=='a')
  115. {
  116. scanf("%lld%lld%lld",&x,&y,&z);
  117. modify(root,,n,x,y,z,);
  118. }
  119. else if ((type[]=='s') && (type[]=='e'))
  120. {
  121. scanf("%lld%lld%lld",&x,&y,&z);
  122. modify(root,,n,x,y,z,);
  123. }
  124. else if ((type[]=='s') && (type[]=='u'))
  125. {
  126. scanf("%lld%lld",&x,&y);
  127. printf("%lld\n",ask(root,,n,x,y,));
  128. }
  129. else if ((type[]=='m') && (type[]=='a'))
  130. {
  131. scanf("%lld%lld",&x,&y);
  132. printf("%lld\n",ask(root,,n,x,y,));
  133. }
  134. else
  135. {
  136. scanf("%lld%lld",&x,&y);
  137. printf("%lld\n",ask(root,,n,x,y,));
  138. }
  139. }
  140. return ;
  141. }

codevs 4927 线段树练习5的更多相关文章

  1. Codevs 4927 线段树练习5(分块)

    4927 线段树练习5 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 有n个数和5种操作 add a b c:把区间[a,b]内的 ...

  2. codevs 1082 线段树练习 3(区间维护)

    codevs 1082 线段树练习 3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...

  3. codevs 1080 线段树点修改

    先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...

  4. codevs 1082 线段树区间求和

    codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...

  5. codevs 1080 线段树练习 CDQ分治

    codevs 1080 线段树练习 http://codevs.cn/problem/1080/  时间限制: 1 s  空间限制: 128000 KB   题目描述 Description 一行N个 ...

  6. codevs 1080 线段树练习

    链接:http://codevs.cn/problem/1080/ 先用树状数组水一发,再用线段树水一发 树状数组代码:84ms #include<cstdio> #include< ...

  7. 【树状数组区间修改区间求和】codevs 1082 线段树练习 3

    http://codevs.cn/problem/1082/ [AC] #include<bits/stdc++.h> using namespace std; typedef long ...

  8. codevs 1082 线段树练习3

    1082 线段树练习 3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master 题解       题目描述 Description 给你N个数,有两种操作: 1: ...

  9. codevs 1299 线段树 区间更新查询

    1299 切水果  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master 题解  查看运行结果     题目描述 Description 简单的说,一共N个水果排成 ...

随机推荐

  1. iOS获取手机相关信息

    iOS具体的设备型号: #include <sys/types.h> #include <sys/sysctl.h> - (void)test { //手机型号. size_t ...

  2. MyEclipse编码设置

    (1)windows---->Preferences (2)general---->Workspace (3)设置编码

  3. poj 3114(强连通缩点+SPFA)

    题目链接:http://poj.org/problem?id=3114 思路:题目要求很简单,就是求两点之间的花费的最短时间,不过有一个要求:如果这两个city属于同一个国家,则花费时间为0.如何判断 ...

  4. 数据库操作(ADO)

    QTP工具本身自带有数据查询和验证功能,但是使用的人会感觉这个功能使用起来比较麻烦,灵活性和复用性较低,于是我们选择了用脚本调用ADO组件实现数据库的操作,现总结下工作中用到的数据库操作,代码如下: ...

  5. ios开发--animation flash动画

        /**  *  showAnimationFlash  */ + (void)showAnimationFlashWithView:(UIView *)animationView durati ...

  6. Bootstrap全屏

    1.由于bootstrap中的.containter是根据媒体查询定死了width,所以页面不会占满全屏,若要全屏,则最外面的div的class不能用container(或改用.container-f ...

  7. Centos环境下部署游戏服务器-常用命令

         图1     在Linux的世界,如果你不玩命令,那你见了同行都不好意思和人家打招呼.同时服务器正常状况下放在远端,一般都是开ssh登录服务器,相信远程桌面的人很少见吧.这篇文章说说Linu ...

  8. WordPress插件:幻灯片Meta Slider

    在wordpress中添加幻灯片的方法很简单,通过使用Meta Slider就可以简单地给wordpress添加幻灯片. 插件下载>> 安装后启用插件,根据提示创建幻灯片: 设置幻灯片样式 ...

  9. 初始化glew,创建OpenGL渲染上下文

    void RegisterWinDowClass(HINSTANCE hInstance,std::string className,WNDPROC proc) { WNDCLASS wndClass ...

  10. 让fdisk输出更准确合理

    注意:新版本的fdisk默认输出已经正确合理了,本文只适用于旧版本的fdisk. 1 无option选项参数的输出 [root@localhost ~]# fdisk -l Disk /dev/sda ...