之前说过这是线段树的裸题,但是当看了http://kenby.iteye.com/blog/962159 这篇题解后我简直震惊了,竟然能如此巧妙地转化为用树状数组来处理,附上部分截图(最好还是进入原网址细细品味):

依照他的思路附上我的代码:

 #include<cstdio>
#include<cstring>
#define lowbit(x) ((x)&-(x))
typedef long long LL;
const int maxn= ;
LL org[maxn+]; struct tree{
LL c[maxn+];
void clear() { memset(c,,sizeof(c)); }
LL sum(int x) const {
LL res= ;
while(x){
res+= c[x];
x-= lowbit(x);
}
return res;
}
void add(int x, LL d){
while(x<=maxn){
c[x]+= d;
x+= lowbit(x);
}
}
} d1,d2; inline LL sum(int x) {
return org[x]+(x+)*d1.sum(x)-d2.sum(x);
} int main(){
int n,q,a,b;
LL x,c;
while(~scanf("%d%d",&n,&q)){
memset(org,,sizeof(org));
d1.clear();
d2.clear();
for(int i=; i<=n; ++i){
scanf("%lld",&x);
org[i]= org[i-]+x;
}
while(q--){
getchar();
if(getchar()=='Q'){
scanf("%d%d",&a,&b);
printf("%lld\n",sum(b)-sum(a-));
}
else {
scanf("%d%d%lld",&a,&b,&c);
d1.add(a,c);
d1.add(b+,-c);
d2.add(a,c*a);
d2.add(b+,-c*(b+));
}
}
}
return ;
}

  提交后发现比线段树要快一点,再加上代码的精简性,树状数组,果然够强大!

POJ 3468(树状数组的威力)的更多相关文章

  1. POJ 3321 树状数组(+dfs+重新建树)

    Apple Tree Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 27092   Accepted: 8033 Descr ...

  2. POJ 2352Stars 树状数组

    Stars Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 42898   Accepted: 18664 Descripti ...

  3. poj 2299 树状数组求逆序数+离散化

    http://poj.org/problem?id=2299 最初做离散化的时候没太确定可是写完发现对的---由于后缀数组学的时候,,这样的思维习惯了吧 1.初始化as[i]=i:对as数组依照num ...

  4. poj 3928 树状数组

    题目中只n个人,每个人有一个ID和一个技能值,一场比赛需要两个选手和一个裁判,只有当裁判的ID和技能值都在两个选手之间的时候才能进行一场比赛,现在问一共能组织多少场比赛. 由于排完序之后,先插入的一定 ...

  5. POJ 2299 树状数组+离散化求逆序对

    给出一个序列 相邻的两个数可以进行交换 问最少交换多少次可以让他变成递增序列 每个数都是独一无二的 其实就是问冒泡往后 最多多少次 但是按普通冒泡记录次数一定会超时 冒泡记录次数的本质是每个数的逆序数 ...

  6. poj 2299 树状数组求逆序对数+离散化

    Ultra-QuickSort Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 54883   Accepted: 20184 ...

  7. poj 2182 树状数组

    这题对于O(n^2)的算法有很多,我这随便贴一个烂的,跑了375ms. #include<iostream> #include<algorithm> using namespa ...

  8. POJ 2352 树状数组

    学习自:链接以及百度百科 以及:https://www.bilibili.com/video/av18735440?from=search&seid=363548948825132979 理解 ...

  9. POJ 2299树状数组求逆序对

    求逆序对最常用的方法就是树状数组了,确实,树状数组是非常优秀的一种算法.在做POJ2299时,接触到了这个算法,理解起来还是有一定难度的,那么下面我就总结一下思路: 首先:因为题目中a[i]可以到99 ...

随机推荐

  1. android5.0 编译

    android5.0编译需要jdk1.7版本,将来本地可能需要同时维护两套jdk版本,请参考: 在线安装openjdk1.7 sudo apt-get install openjdk-7-jre op ...

  2. JDBC批量Insert深度优化(有事务)

    环境: MySQL 5.1 RedHat Linux AS 5 JavaSE 1.5 DbConnectionBroker 微型数据库连接池   测试的方案: 执行10万次Insert语句,使用不同方 ...

  3. 用C#钩子写一个改键外挂

    我的微信群——软件开发测试工程师交流群,欢迎扫码: 改键是一种习惯,比如在玩儿lol或者dota的时候.理论上玩儿什么游戏都可以改键. 做一个窗体(点击Install——应用改键,点击Uninstal ...

  4. OS开发(Objective-C)常用库索引

    code4app.com 这网站不错,收集各种 iOS App 开发可以用到的代码示例 cocoacontrols.com/ 英文版本的lib收集 objclibs.com/ 精品lib的收集网站 h ...

  5. ios项目中引用其他项目复习

    ios项目中引用其他开源项目,今天再次复习了,记个备注. 1. 将开源项目的.xcodeproj拖入项目frameworks 2. Build Phases下 Links Binary With Li ...

  6. android 引入phonegap

    步骤: 1.复制cordova-2.9.0.jar 到lib文件下 2.在assets文件下创建www文件夹及其cordova.js .jquery.js.jquery.mobile-1.3.2.cs ...

  7. MVC 中使用EF

    EF 1)简单查询 后台代码 using MvcApplication18.Models; using System; using System.Collections.Generic; using ...

  8. 安卓开发之json解析

    1.从网页获取json返回字符串 public class ReadNet extends AsyncTask<URL, Integer, String> { @Override      ...

  9. JAVA数字想加并输出

    Java课后作业博文 1.设计思想:JAVA里面的Scnner类可以将用户输入的各种字符转化为其他类型.例如 Scanner sc = new Scanner(System.in); int a =  ...

  10. ios照片获取,拍照功能

    // //  HYBPhotoPickerManager.h //  ehui // //  Created by 黄仪标 on 14/11/26. //  Copyright (c) 2014年 黄 ...