Codeforces Round #248 (Div. 2) B称号 【数据结构:树状数组】
主题链接: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称号 【数据结构:树状数组】的更多相关文章
- 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 ...
- Codeforces Round #301 (Div. 2) E . Infinite Inversions 树状数组求逆序数
E. Infinite Inversions ...
- 【Codeforces Round #433 (Div. 1) C】Boredom(树状数组)
[链接]h在这里写链接 [题意] 给你一个n*n的矩阵. 其中每一列都有一个点. 任意两个点构成了矩形的两个对角点 ->即任意两个点确定了一个矩形. ->总共能确定n*(n-1)/2个矩形 ...
- 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 ...
- Codeforces Beta Round #12 (Div 2 Only) D. Ball 树状数组查询后缀、最值
http://codeforces.com/problemset/problem/12/D 这里的BIT查询,指的是查询[1, R]或者[R, maxn]之间的最值,这样就够用了. 设三个权值分别是b ...
- ACM数据结构-树状数组
模板: int n; int tree[LEN]; int lowbit(int x){ return x&-x; } void update(int i,int d){//index,del ...
- 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 ...
- Codeforces Round #413 (Div1 + Div. 2) C. Fountains(树状数组维护最大值)
题目链接:https://codeforces.com/problemset/problem/799/C 题意:有 c 块硬币和 d 块钻石,每种喷泉消耗硬币或钻石中的一种,每个喷泉有一个美丽值,问建 ...
- 【poj 3167】Cow Patterns(字符串--KMP匹配+数据结构--树状数组)
题意:给2个数字序列 a 和 b ,问按从小到达排序后,a中的哪些子串与b的名次匹配. a 的长度 N≤100,000,b的长度 M≤25,000,数字的大小 K≤25. 解法:[思考]1.X 暴力. ...
随机推荐
- UVALive - 4960 Sensor network(生成树+LCA)
题目大意:给出N个点.M条边.问这N个点形成的生成树的最大权值边-最小权值边的最小值 解题思路:先排序,然后按生成树的kruscal算法进行加边,再维护一个最小权值边 加边的时候要考虑一下加下去的边是 ...
- 嵌入式/X86下linux系统死机及内存优化
一. CPU 过高或死锁导致系统卡死 1. CPU占用过高 (1)开线程太多导致CPU占用过高,系统卡死 解决:优化应用层业务逻辑,有些业务不必开线程就不开 (2)频繁清缓存导致读spi-flash ...
- 关于stm32的串口电压问题
在同一块板子的另一个 2号串口,因为没有使用所以就没有配置,,,所以导致这三个引脚都为0; 上面的串口接口封装是围墙座: 注意:倘若要连线,那时候要记得交叉,当然这也要看各自的设计才行
- ios开发网络学习AFN框架的使用一:get和post请求
#import "ViewController.h" #import "AFNetworking.h" @interface ViewController () ...
- ios开发之Quartz2D 四:画饼图
#import "PieView.h" @implementation PieView - (void)drawRect:(CGRect)rect { // Drawing cod ...
- Android 在ListView中嵌套ListView的事件处理
前天在工作中遇到在ListView中的Item需要用ListView来展现处理后的内容,然后就遇到了一个很头疼的问题,作为Item的ListView没法进行滑动,而且显示也不正常,只是显示几个子Ite ...
- session了解及超时处理
Session了解 Session是什么 引言 在web开发中,session是个非常重要的概念.在许多动态网站的开发者看来,session就是一个变量,而且其表现像个黑洞,他只需要将东西在合 ...
- POJ - 2236Wireless Network-并查集
id=11125" target="_blank" style="color:blue; text-decoration:none">POJ - ...
- thinkphp5多级控制器是什么?怎么使用?
thinkphp5多级控制器是什么?怎么使用? 一.总结 1.多级控制器是让控制器的级数变成多级,也就是controller目录下可以新建其它目录. 2.使用的话注意目录下的控制的的命名空间(加上目录 ...
- JSON 表达式
JSON语法规则: 数据在名称/值对中: 数据由逗号分隔: 大括号保存对象: 中括号保存数组 1.访问对象值: var myObj,x; myObj = {" ...