线段树入门题……

因为poj原来的代码莫名RE,所以丧病地写了区间修改的分块……

其实就是块上打标记,没有上传下传之类。

 #include<cstdio>
#include<cmath>
using namespace std;
int n,m,a[],l[],r[],delta[],num[],sum,sz,x,y,v;
char op[];
long long sumv[];
void makeblock()
{
sz=sqrt(n);
for(sum=;sum*sz<n;sum++)
{
l[sum]=(sum-)*sz+;
r[sum]=sum*sz;
for(int i=l[sum];i<=r[sum];i++) {num[i]=sum; sumv[sum]+=a[i];}
}
l[sum]=sz*(sum-)+; r[sum]=n;
for(int i=l[sum];i<=r[sum];i++) {num[i]=sum; sumv[sum]+=a[i];}
}
inline void update()
{
if(num[x]+>=num[y]){for(int i=x;i<=y;i++) a[i]+=v;}
else
{
for(int i=x;i<=r[num[x]];i++) a[i]+=v;
for(int i=l[num[y]];i<=y;i++) a[i]+=v;
for(int i=num[x]+;i<num[y];i++) delta[i]+=v;
}
}
inline void query()
{
long long ans=;
if(num[x]+>=num[y]){for(int i=x;i<=y;i++) ans+=a[i];}
else
{
for(int i=x;i<=r[num[x]];i++) ans+=(long long)(delta[num[x]]+a[i]);
for(int i=l[num[y]];i<=y;i++) ans+=(long long)(delta[num[y]]+a[i]);
for(int i=num[x]+;i<num[y];i++) ans+=sumv[i]+(long long)((l[i]-r[i]+)*delta[i]);
}
printf("%lld\n",ans);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
for(int i=;i<=m;i++)
{
scanf("%s%d%d",op,&x,&y);
if(op[]=='Q') query();
else {scanf("%d",&v); update();}
}
return ;
}

最新文章

  1. WEB项目会话集群的三种办法
  2. shc
  3. 做一个会使用PS的前端开发
  4. js文字无缝滚动
  5. Oracle 11g AMM与ASMM切换
  6. Minesweeper PC/UVa IDs: 110102/10189, Popularity: A,Success rate: high Level: 1
  7. sql查询结果集根据指定条件排序的方法
  8. 【set&amp;&amp;sstream||floyed判环算法】【UVa 11549】Calculator Conundrum
  9. JS滚动加载
  10. ionic2 tabs使用自定义图标
  11. 微信小程序教学第三章(含视频):小程序中级实战教程:列表-页面逻辑处理
  12. Solr6.0与Jetty、Tomcat在Win环境下搭建/部署
  13. Netty基础系列(1) --linux网路I/O模型
  14. 微信小程序,转盘抽奖
  15. 『高次同余方程 Baby Step Giant Step算法』
  16. web开篇
  17. int 和 Integer
  18. 6、JPA-映射-单向一对多
  19. gdb调试若干问题
  20. 为网站添加emoji表情的支持

热门文章

  1. ExtJS 4.1 TabPanel动态加载页面并执行脚本【转】
  2. POJ2195:Going Home (最小费用最大流)
  3. spring4.3注解
  4. 关于CRC循环冗余校验的总结(C#)
  5. python 写 excel 模块 : xlwt
  6. CF#328 (Div. 2) C(大数)
  7. appium===元素定位
  8. ARM-Linux (临时,正式) 建立页表的比较【转】
  9. GLE api
  10. hdu 5750(数论)