主题链接:http://codeforces.com/contest/433/problem/B

题目大意:给n(1 ≤ n ≤ 105)个数据(1 ≤ vi ≤ 109),当中有m(1 ≤ m ≤ 105)个问题,分两种。第一种:给出l,r,让你求出v[l],v[r]之间的全部数据和;另外一种:先将原数据升序排序得到vv数组,给出l,r,让你求出vv[l],vv[r]之间的全部数据和;

此题假设用暴力求解,因为数据太大,会TLE,所以利用树状数组,高速求解区间和的问题。

假设不懂树状数组,能够去看看关于数据结构的知识

代码:

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std; int v[100011];
int vv[100011];
long long Cv[100011];// 每一个C数组代表v[i-lowbit(i)+1]到v[i]之间的和
long long Cvv[100011]; int lowbit(int x)
{
return x&(x^(x-1));
}
long long Sumv(int i) //求出数组v[1]到v[i]的和
{
long long result=0;
while (i>=1)
{
result+=Cv[i];
i-=lowbit(i);
}
return result;
}
long long Sumvv(int i) //求出数组vv[1]到vv[i]的和
{
long long result=0;
while (i>=1)
{
result+=Cvv[i];
i-=lowbit(i);
}
return result;
}
int main()
{
int n,m,t,l,r;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&v[i]);
vv[i]=v[i];
}
sort(vv,vv+n+1);
for(int i=1;i<=n;i++)
{
for(int j=i-lowbit(i)+1;j<=i;j++)
Cv[i]+=v[j];
for(int j=i-lowbit(i)+1;j<=i;j++)
Cvv[i]+=vv[j];
}
scanf("%d",&m);
for(int i=0;i<m;i++)
{
scanf("%d%d%d",&t,&l,&r);
if(t==1)
{
printf("%I64d\n",Sumv(r)-Sumv(l-1));
}
else
{
printf("%I64d\n",Sumvv(r)-Sumvv(l-1));
}
}
return 0;
}

此题也能够不用树状数组,能够用s[i]数组代表v[1]到v[i]的全部数据和,要求v[l]到v[r]之间的数据和,仅仅须要用s[r]-s[l-1]即可了,两种问题都一样,大家能够自己试试。



版权声明:本文博客原创文章,博客,未经同意,不得转载。

Codeforces Round #248 (Div. 2) B称号 【数据结构:树状数组】的更多相关文章

  1. Codeforces Round #381 (Div. 2) D dfs序+树状数组

    D. Alyona and a tree time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  2. Codeforces Round #301 (Div. 2) E . Infinite Inversions 树状数组求逆序数

                                                                    E. Infinite Inversions               ...

  3. 【Codeforces Round #433 (Div. 1) C】Boredom(树状数组)

    [链接]h在这里写链接 [题意] 给你一个n*n的矩阵. 其中每一列都有一个点. 任意两个点构成了矩形的两个对角点 ->即任意两个点确定了一个矩形. ->总共能确定n*(n-1)/2个矩形 ...

  4. Codeforces Beta Round #79 (Div. 1 Only) B. Buses 树状数组

    http://codeforces.com/contest/101/problem/B 给定一个数n,起点是0  终点是n,有m两车,每辆车是从s开去t的,我们只能从[s,s+1,s+2....t-1 ...

  5. Codeforces Beta Round #12 (Div 2 Only) D. Ball 树状数组查询后缀、最值

    http://codeforces.com/problemset/problem/12/D 这里的BIT查询,指的是查询[1, R]或者[R, maxn]之间的最值,这样就够用了. 设三个权值分别是b ...

  6. ACM数据结构-树状数组

    模板: int n; int tree[LEN]; int lowbit(int x){ return x&-x; } void update(int i,int d){//index,del ...

  7. Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2) C. Fountains 【树状数组维护区间最大值】

    题目传送门:http://codeforces.com/contest/799/problem/C C. Fountains time limit per test 2 seconds memory ...

  8. Codeforces Round #413 (Div1 + Div. 2) C. Fountains(树状数组维护最大值)

    题目链接:https://codeforces.com/problemset/problem/799/C 题意:有 c 块硬币和 d 块钻石,每种喷泉消耗硬币或钻石中的一种,每个喷泉有一个美丽值,问建 ...

  9. 【poj 3167】Cow Patterns(字符串--KMP匹配+数据结构--树状数组)

    题意:给2个数字序列 a 和 b ,问按从小到达排序后,a中的哪些子串与b的名次匹配. a 的长度 N≤100,000,b的长度 M≤25,000,数字的大小 K≤25. 解法:[思考]1.X 暴力. ...

随机推荐

  1. Java 开源博客——B3log Solo 0.6.7 正式版发布了!

    Java 开源博客 -- B3log Solo 0.6.7 正式版发布了!欢迎大家下载. 另外,欢迎观摩 B3log 团队的新项目:Wide,也非常欢迎大家参与进来 :-) 特性 基于标签的文章分类 ...

  2. apche commons项目简介 分类: B1_JAVA 2014-06-26 11:27 487人阅读 评论(0) 收藏

    1.apche commons项目封装了日常开发中经常使用的功能,如io, String等. http://commons.apache.org/ Apache Commons项目的由三部分组成: T ...

  3. [Javascript] Create scrollable DOM elements with Greensock

    In this lesson, we will look at Greensock's Draggable API. We will implement a scrollable <div> ...

  4. 指针知识梳理6-const与指针

    const 定义的变量为仅仅读变量.在语法层面上通过这个变量去改动内存是不同意的. 可是对于下面代码.就有非常多人绕了: const int  *p1;  //p1能变.*p1不能变 int cons ...

  5. keepalived小结

    keepalived 启动流程: 启动三个进程(主进程.healthcheck 进程.vrrp进程)之后,先进入backup状态,运行一次vrrp_script成功后发现没有主,这时候会进入maste ...

  6. css 水平垂直居中的方法总结

    在项目中经常会遇到设置元素水平垂直居中的需求.而且具体的场景也不同,所以将个人总结的方法做个汇总,希望对浏览者有用. 以下所举的例子都以一个html为准,这里规定好一些公用样式. body { bac ...

  7. Java 之 assert (断言)

    我们知道C/C++语言中有断言的功能(assert).在Java SE 1.4版本以后也增加了断言的特性. 断言是为了方便调试程序,并不是发布程序的组成部分.理解这一点是很关键的. 默认情况下,JVM ...

  8. Git 常用命令总结(精问)

    Git 常用命令总结(精问) 一.总结 一句话总结:下次尝试做任何git的操作之前,把这个精看精问一遍,绝对会有意向不到的收获. 二.Git 常用命令总结 1.git常用命令 安装及配置: Ubunt ...

  9. Popup 解决位置不随窗口/元素FrameworkElement 移动更新的问题

    原文:Popup 解决位置不随窗口/元素FrameworkElement 移动更新的问题 Popup弹出后,因业务需求设置了StaysOpen=true后,移动窗口位置或者改变窗口大小,Popup的位 ...

  10. 课后作业 04 --DateTime应用,判断多久后生日之类

    try { Console.Write("请以年-月-日的形式输入您的生日:"); string strA = Console.ReadLine(); DateTime bir = ...