时间限制: 3 s
 空间限制: 128000 KB
 题目等级 : 大师 Master
题目描述 Description

给你N个数,有两种操作:

1:给区间[a,b]的所有数增加X

2:询问区间[a,b]的数的和。

输入描述 Input Description

第一行一个正整数n,接下来n行n个整数,

再接下来一个正整数Q,每行表示操作的个数,

如果第一个数是1,后接3个正整数,

表示在区间[a,b]内每个数增加X,如果是2,

表示操作2询问区间[a,b]的和是多少。

pascal选手请不要使用readln读入

输出描述 Output Description

对于每个询问输出一行一个答案

样例输入 Sample Input

3

1

2

3

2

1 2 3 2

2 2 3

样例输出 Sample Output

9

数据范围及提示 Data Size & Hint

数据范围

1<=n<=200000

1<=q<=200000

 
分块大法 此题用分块优于线段树
#include <ctype.h>
#include <cstdio>
#include <cmath>
#define N 500
typedef long long LL;
void read(LL &x)
{
x=;bool f=;char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-') f=;
ch=getchar();
}
while(isdigit(ch))
{
x=x*+ch-'';
ch=getchar();
}
x=f?(~x)+:x;
}
LL C,m,belong[N*N],cnt,tag[N],sum[N],beg[N],en[N],n,a[N*N];
LL min(LL a,LL b) {return a>b?b:a;}
LL max(LL a,LL b) {return a>b?a:b;}
void update(LL x,LL y,LL z)
{
for(LL i=belong[x];i<=belong[y];i++)
{
if(x<=beg[i]&&y>=en[i]) tag[i]+=z,sum[i]+=(en[i]-beg[i]+)*z;
else for(LL j=max(beg[i],x);j<=min(en[i],y);j++) a[j]+=z,sum[i]+=z;
}
}
LL query(LL x,LL y)
{
LL ans=;
for(LL i=belong[x];i<=belong[y];i++)
{
if(x<=beg[i]&&y>=en[i]) ans+=sum[i];
else for(LL j=max(beg[i],x);j<=min(en[i],y);j++) ans+=a[j]+tag[i];
}
return ans;
}
int main()
{
read(n);
for(LL i=;i<=n;i++) read(a[i]);
C=sqrt(n);
for(LL i=;i<=n;i+=C)
{
beg[++cnt]=i;
en[cnt]=min(i+C-,n);
}
for(LL i=;i<=cnt;i++)
{
for(LL j=beg[i];j<=en[i];j++) belong[j]=i,sum[i]+=a[j];
}
read(m);
for(LL type,x,y,z;m--;)
{
read(type);
read(x);
read(y);
if(type==)
{
read(z);
update(x,y,z);
}
else printf("%lld\n",query(x,y));
}
return ;
}

最新文章

  1. Effeckt.css – CSS3 Transitions &amp; Animations 精妙应用
  2. Maven学习(一)安装 配置
  3. 自然语言15_Part of Speech Tagging with NLTK
  4. lists删除
  5. jquery-qrcode生成二维码
  6. next_permutation 和 一个不成功的案例
  7. 异常处理与MiniDump详解(4) MiniDump
  8. Lintcode: Permutation Index II
  9. 这是第二道题内容要求写一个银行的ATM系统 这个浪费了好长时间 ,遇到了许多问题,不过都解决了,上程序
  10. UIView详解1
  11. android之LruCache源代码解析
  12. 【css基础】垂直外边距的合并
  13. DMLC深度机器学习框架MXNet的编译安装
  14. mysql 千万级数据查询效率实践,分析 mysql查询优化实践--本文只做了一部分,仅供参考
  15. linux-----jdk、activemq安装
  16. Tensorflow之调试(Debug)及打印变量
  17. noexcept(c++11)
  18. C++ 读书笔记1
  19. VS Code 配置 C/C++ 环境
  20. Kafka学习之(一)了解一下Kafka及关键概念和处理机制

热门文章

  1. MVC中从Controller像View层传值
  2. 比特币客户端Electrum使用介绍
  3. 性能-发挥ORACLE分区表
  4. Macaca框架
  5. Java多线程系列八——volatile和ThreadLocal
  6. vs2008添加消息函数方法
  7. bzoj 2756 [SCOI2012]奇怪的游戏【二分+最大流】
  8. yml文件教程
  9. Go 连接PostgreSQL数据库
  10. 【react native】有关入坑3个月RN的心路历程