别人树状数组跑几百毫秒 我跑 2500多

 #include<cstdio>
#include<map>
//#include<bits/stdc++.h>
#include<vector>
#include<stack>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<cstdlib>
#include<climits>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
typedef __int64 int64;
const ll mood=1e9+;
const int64 Mod=;
const double eps=1e-;
const int MAXN=;
const double PI=acos(-1.0);
inline void rl(ll&num){
num=;ll f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<='')num=num*+ch-'',ch=getchar();
num*=f;
}
inline void ri(int &num){
num=;int f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<='')num=num*+ch-'',ch=getchar();
num*=f;
}
int getnum()//相邻的个位整数输入 如想分别保存1234 输入连续的1234 a[i]=getnum();就可以实现
{
char ch=getchar();
while((ch<'' || ch>'') && ch!='-')
ch=getchar();
return (ch-'');
}
inline void out(int x){ if(x<) {putchar('-'); x*=-;}if(x>) out(x/); putchar(x%+''); }
ll sum[MAXN<<],add[MAXN<<];
int n;
void init(int _n)
{
n=;
while(n<_n) n*=;
for(int i=;i<*n-;i++)
{
sum[i]=add[i]=;
}
}
void pushdown(int rt,int m)
{
if(add[rt])
{
add[rt*+] += add[rt];
add[rt<<|] += add[rt];
sum[rt*+] += add[rt] * (m - (m>>));
sum[rt<<|] += add[rt] * (m>>);
add[rt] = ;
}
}
void pushup(int rt)
{
sum[rt]=sum[rt*+]+sum[rt<<|];
}
void update(int a,int b,int c,int k,int l,int r)
{
if(r<=a||b<=l) return ;
if(a<=l&&r<=b)
{
add[k]+=c;
sum[k]+=(ll)c*(r-l);
return ;
}
if(l+==r) return;
pushdown(k,r-l);
int m=(l+r)/;
if(b<=m)
{
update(a,b,c,k*+,l,m);
}
else{
if(l>m)update(a,b,c,k*+,m,r);
else{
update(a,b,c,k*+,l,m);
update(a,b,c,k*+,m,r);
}
}
pushup(k);
}
ll query(int a,int b,int k,int l,int r)
{
if(r<=a||b<=l) return ;
if(a<=l&&r<=b)
{
return sum[k];
}
pushdown(k,r-l);
int m=(l+r)/;
ll res=;
if(b<=m)
{
res+=query(a,b,k*+,l,m);
}
else{
if(l>m)res+=query(a,b,k*+,m,r);
else{
res+=query(a,b,k*+,l,m);
res+=query(a,b,k*+,m,r);
}
}
return res;
}
void ad(int k,int a)
{
k+=n-;
sum[k]=a;
while(k>)
{
k=(k-)/;
sum[k]=sum[k*+]+sum[k*+];
}
}
int main()
{
int _n,m;
while(scanf("%d%d",&_n,&m)==)
{
init(_n);
for(int i=;i<=_n;i++)
{
int tem;
ri(tem);ad(i,tem);
}
char ch[]; int a,b,c;
while(m--)
{
scanf("%s",ch);
if(ch[] == 'Q')
{
scanf("%d %d", &a,&b);
printf("%lld\n",query(a,b+,,,n));
} else
{
scanf("%d %d %d",&a,&b,&c);
update(a,b+,c,,,n);
}
}
memset(add,,sizeof(add));
memset(sum,,sizeof(sum));
}
return ;
}

等看能不能优化再写

最新文章

  1. Storm的ack机制在项目应用中的坑
  2. 【工具】清理Windows Installer冗余文件(支持64位NT6.x系统)
  3. PL/SQL无法连接,提示:pl/sql initialization error sql*net not properly installed
  4. iOS开发之静态库(一)—— 基本概念
  5. Oracle Jdbc demo
  6. Nginx 日志文件切割
  7. 区分listview的item和Button的点击事件
  8. 写的cursor demo仅作记录
  9. Redis哨兵模式
  10. 原生 JS Ajax,GET和POST 请求实例代码
  11. js加载XML文件
  12. ci框架中表前缀的处理
  13. Linux Debugging(六): 动态库注入、ltrace、strace、Valgrind
  14. [Swift]LeetCode257. 二叉树的所有路径 | Binary Tree Paths
  15. React Fiber 数据结构揭秘
  16. Number Sequence(周期是336!!不是48!!)
  17. Android UI(五)云通讯录项目之联系人列表,带侧滑选择,带搜索框
  18. P1382 楼房 set用法小结
  19. texlive测试是否安装成功
  20. Codeforces 776E The Holmes Children

热门文章

  1. 【eclipse插件开发实战】 Eclipse插件开发5——时间插件Timer开发实例详解
  2. mysql:视图,触发器
  3. roguelike地牢生成算法
  4. 牛客 - 700I - Matrix Again - 二维RMQ - 二分
  5. HDU3065【AC自动机-AC感言】
  6. POJ3692【二分匹配】
  7. 51nod 1449 砝码称重【天平/进制】
  8. jzoj5987. 【WC2019模拟2019.1.4】仙人掌毒题 (树链剖分+概率期望+容斥)
  9. PHP实现用户登录页面
  10. bzoj1142:[POI2009]Tab