1687: 数组操作
Time Limit: 1 Sec Memory Limit: 128 MB
[Submit][Status][Web Board]
Description

给你一个初始的长度为n的数组。(1<=n<=105)

有两个操作:

Op1(l, r):给两个整数l和r(1<=l<=r<=当前数组长度)。你需要计算数组从l到r的所有元素的和。

Op2(x):给你一个整数x(|x| <= 109),你需要将x添加到数组的头部。原先的第一个元素变成第二个元素,第二个元素变成第三个,以此类推。并且数组的长度增加1.

Input

多组测试数据,处理到文件结尾。

每组测试数据,首先给出一个N(1 <= N <= 105), 表示初始的数组的元素个数。

第二行N个数字表示初始数组的n个元素,a1 a2 … aN.(|ai| <= 109)。

第三行有一个Q,表示有Q个操作。1 <= Q <= 105

接下来Q行,每行的第一个数表示操作的类型,只可能是1或者2,形式如下:

1 l r:操作1,求l到r的元素的和。

2 x:操作2,将x添加到数组头部。

Output

对于每组测试数据,首先输出"Case x:",表示当前是第x组测试数据。

然后对于每个操作1输出对应的答案,对于操作2不需要任何输出。

Sample Input

10
1 2 3 4 5 6 7 8 9 10
4
1 1 10
1 1 1
1 10 10
1 2 7
5
6 7 8 9 10
9
2 5
2 4
1 2 7
2 3
2 2
2 1
1 1 10
1 1 1
1 10 10

Sample Output

Case 1:
55
1
10
27
Case 2:
45
55
1
10

HINT

Source
AC代码~:

#include <stdio.h>
#include <string.h>
long long a[200005],b[200005];
int main()
{int n,c = 0;while(~scanf("%d",&n)){memset(a,0,sizeof(a));memset(b,0,sizeof(b));for(int i = n; i > 0; i--)//数组indext倒过来存,加一个数时就方便了{scanf("%lld",&a[i]);}for(int j = 1; j <= n; j++)//最后一个数到倒数第j个数的和{b[j] = b[j-1] + a[j];}int Q,num,t;scanf("%d",&Q);printf("Case %d:\n",++c);while(Q--){scanf("%d",&num);if(num==1){int l,r;scanf("%d%d",&l,&r);printf("%lld\n",b[n-l+1]-b[n-r]);//草稿纸上推出这个公式}else{n++;scanf("%lld",&a[n]);b[n] = b[n-1] + a[n];}}}return 0;
}

(用动态数组+数状数组)时间超限代码:
//时间超限,树状数组中整合数组c更新慢(每次加一个数要更新,耗时啊!!)

#include <stdio.h>
#include <vector>
using namespace std;
vector<long long>a(200005),c(200005);
int n;
int lowbit(int x)
{return x&-x;
}
long long SUM(int y)
{long long sum = 0;for(int i = y; i > 0; i-=lowbit(i))sum += c[i];return sum;
}
void update(int y,int k)
{for(int i = y; i <= n; i+=lowbit(i))c[i] += k;
}
int main()
{int Q,C = 0;while(~scanf("%d",&n)){for(int i = 1; i<= n; i++){scanf("%lld",&a[i]);update(i,a[i]);}scanf("%d",&Q);printf("Case %d:\n",++C);while(Q--){int num,l,r,t;scanf("%d",&num);if(num==1){scanf("%d%d",&l,&r);long long sum = SUM(r)-SUM(l-1);printf("%lld\n",sum);}else{scanf("%d",&t);a.insert(a.begin()+1,t);n++;fill(c.begin(),c.begin()+n+1,0);//动态数组赋值for(int i = 1; i<= n; i++){update(i,a[i]);}}}}return 0;
}

1687: 数组操作(非常规思维)相关推荐

  1. js map 排序_数组方法写给女友的一系列 JS 数组操作(建议收藏 | 内附思维导图)...

    前言 最近和女友,咳咳...(说出来可能会被打s)学习JS数组方法,用几个字形容的话就是听说过,实际使用.遇到的时候就分不清具体方法会得到怎样的结果. 今天我将通过这篇文章好好整理一下关于JS数组的方 ...

  2. 「数组方法」写给女友的一系列 JS 数组操作(建议收藏 | 内附思维导图)

    前言 最近和女友,咳咳-(说出来可能会被打s)学习JS数组方法,用几个字形容的话就是听说过,实际使用.遇到的时候就分不清具体方法会得到怎样的结果. 今天我将通过这篇文章好好整理一下关于JS数组的方法, ...

  3. Javascript数组操作

    使用JS也算有段时日,然对于数组的使用,总局限于很初级水平,且每每使用总要查下API,或者写个小Demo测试下才算放心,一来二去,浪费不少时间:思虑下,堪能如此继续之?当狠心深学下方是正道. 原文链接 ...

  4. Java学习笔记(四):数组操作

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://mp.csdn.net/mdeditor/100728414 目录 ...

  5. Numpy入门教程:03.数组操作

    背景 什么是 NumPy 呢? NumPy 这个词来源于两个单词 – Numerical和Python.其是一个功能强大的 Python 库,可以帮助程序员轻松地进行数值计算,通常应用于以下场景: 执 ...

  6. python json数据格式数组内元素递增赋值_python深浅复制,类型转换, json操作,数组操作...

    python深浅复制 import copy a = [1, 2, 3, 4, ['a', 'b']] #原始对象 b = a #赋值,传对象的引用 c = copy.copy(a) #对象拷贝,浅拷 ...

  7. php 常用数组操作

    php常用的数组操作函数,包括数组的赋值.拆分.合并.计算.添加.删除.查询.判断.排序等 array_combine 功能:用一个数组的值作为新数组的键名,另一个数组的值作为新数组的值 <?p ...

  8. php数组操作之合并相同键名的值,排序,排重,去空值等

    一.前言 数组操作是咱们在编程时候经常遇到的,只是数组函数有点多,用到的时候难免会想不起来.特别是针对多维数组的操作,有的时候用自带的数组函数真的很方便,可以避免多次的foreach循环,这里记录一下 ...

  9. C#字符串及数组操作

    一.一维: int[] numbers = new int[]{1,2,3,4,5,6}; //不定长 int[] numbers = new int[3]{1,2,3};//定长 二.多维 int[ ...

最新文章

  1. windows版本下使用xdebug
  2. 3.Linux文件与目录管理
  3. Linux 内核调试必备工具
  4. 使用memcache的session入库
  5. 一台计算机只能安装一块网络接口卡,为什么用路由上网,只有一台电脑可以上去?...
  6. 20145315 《Java程序设计》第五周学习总结
  7. 破格晋升!一批高校教师脱颖而出
  8. 《SQL与关系数据库理论——如何编写健壮的SQL代码》一第2章
  9. zset中的score_读懂才会用 : 带你见识 Redis 的 zset
  10. SUSHI区块奖励将根据此前提案在3月降至每区块40枚
  11. Python+OpenCV:图像平滑
  12. ps怎么转为html和css,一个登录界面的PS设计和HTML/CSS实现
  13. Arduino 工控板开发
  14. 网络营销和电子商务傻傻分不清?
  15. SublimeText3和EverEdit 的一些使用感受
  16. 软件工程——什么是软件
  17. display:flex flex-grow
  18. Error: unable to perform an operation on node ‘rabbit@rabbitma‘ please see diamostics infoxmation
  19. 水平滚动条和垂直滚动条设置
  20. 接入以太坊(Ethereum)测试网络

热门文章

  1. sparkSQL 统计TopN
  2. Python中深拷贝与浅拷贝的区别?
  3. mysql128位整数_mysql的数据类型
  4. yolov4论文_YOLOv4论文详细解读
  5. python创造订单_Odoo 10根据销售订单创建项目
  6. memcached客户端_小水谈Memcache---Memcached安装
  7. 虚拟机当作设置服务器,虚拟机当作设置服务器
  8. python 深度 视差 计算_OpenCV-Python教程:49.立体图像的深度图
  9. 洛谷4139 bzoj 3884 上帝与集合的正确用法
  10. CSS 实例之翻转图片