题目描述

Apojacsleam喜欢数组。

他现在有一个n个元素的数组a,而他要对a[L]-a[R]进行M次操作:

操作一:将a[L]-a[R]内的元素都加上P

操作二:将a[L]-a[R]内的元素都减去P

  最后询问a[l]-a[r]内的元素之和?
    请认真看题干及输入描述。

输入描述:

  1. 输入共M+3行:
    第一行两个数,nM,意义如“题目描述”
    第二行n个数,描述数组。
    3-M+2行,共M行,每行四个数,qLRP,若q1则表示执行操作2,否则为执行操作1
    4行,两个正整数lr

输出描述:

  1. 一个正整数,为a[l]-a[r]内的元素之和

输入例子:
  1. 10 5
  2. 1 2 3 4 5 6 7 8 9 10
  3. 1 1 5 5
  4. 1 2 3 6
  5. 0 2 5 5
  6. 0 2 5 8
  7. 1 4 9 6
  8. 2 7
输出例子:
  1. 23

-->

示例1

输入

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

输出

  1. 23

说明

解题思路:显然这道题要操作的是区间修改,区间查询,但题目中有个坑就是给的内存太少了,用线段树懒标记模板或者是树状数组区间修改+区间查询模板都会超内存,仔细一看这题有一个突破口就是只有一次查询(划重点,如果是多次查询,则应该套公式,否则会超时),并且给定n的最大值只有106,因此我们可以利用树状数组差分求前缀和(实际并没用到树状数组,只是用了一个差分数组来模拟)+一次暴力统计区间[l,r]中所有元素的值即可。关于怎么利用差分来修改区间值和求前缀和,请看这篇:题解报告:Luogu P3368 【模板】树状数组 2(区间修改,单点查询)
AC代码(673ms):
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long LL;
  4. const int maxn=1e6+;
  5. int n,q,p,l,r,k,a[maxn];
  6. int main(){
  7. while(~scanf("%d%d",&n,&q)){
  8. memset(a,,sizeof(a));
  9. for(int i=;i<=n;++i)scanf("%d",&a[i]);
  10. for(int i=n;i>=;--i)a[i]-=a[i-];//利用原数组从后往前差分
  11. while(q--){
  12. scanf("%d%d%d%d",&p,&l,&r,&k);
  13. if(p==)k=-k;
  14. a[l]+=k,a[r+]-=k;//区间修改操作
  15. }
  16. for(int i=;i<=n;++i)a[i]+=a[i-];//求前缀和,还原a[i]值
  17. scanf("%d%d",&l,&r);
  18. LL ans=;
  19. for(int i=l;i<=r;++i)ans+=a[i];//O(n)统计区间[l,r]所有元素a[i]的值
  20. printf("%lld\n",ans);
  21. }
  22. return ;
  23. }

牛客小白月赛5-I-区间(差分求前缀和+一次暴力统计)的更多相关文章

  1. 牛客小白月赛5 I 区间 (interval) 【前缀和】

    链接:https://www.nowcoder.com/acm/contest/135/I 题目描述 Apojacsleam喜欢数组. 他现在有一个n个元素的数组a,而他要对a[L]-a[R]进行M次 ...

  2. 牛客网 牛客小白月赛5 I.区间 (interval)-线段树 or 差分数组?

    牛客小白月赛5 I.区间 (interval) 休闲的时候写的,但是写的心情有点挫,都是完全版线段树,我的一个队友直接就水过去了,为啥我的就超内存呢??? 试了一晚上,找出来了,多初始化了add标记数 ...

  3. 牛客小白月赛5 I - 区间

    看到一份不错的操作..... 链接:https://www.nowcoder.com/acm/contest/135/I 来源:牛客网 Apojacsleam喜欢数组. 他现在有一个n个元素的数组a, ...

  4. 牛客小白月赛6 C 桃花 dfs 求树上最长直径

    链接:https://www.nowcoder.com/acm/contest/136/C来源:牛客网 题目描述 桃花一簇开无主,可爱深红映浅红.                            ...

  5. 牛客小白月赛17 G 区间求和

    传送门 题意: 题解: 原本想着使用暴力方法: 1 #include<stdio.h> 2 #include<string.h> 3 #include<iostream& ...

  6. 牛客小白月赛12 I (tarjan求割边)

    题目链接:https://ac.nowcoder.com/acm/contest/392/I 题目大意:一个含有n个顶点m条边的图,求经过所有顶点必须要经过的边数. 例: 输入: 5 51 22 33 ...

  7. 牛客小白月赛5 D 阶乘(factorial) 【前缀】

    链接:https://www.nowcoder.com/acm/contest/135/D 题目描述 输入描述: 输入数据共一行,一个正整数n,意义如“问题描述”. 输出描述: 输出一行描述答案: 一 ...

  8. 树的最长链-POJ 1985 树的直径(最长链)+牛客小白月赛6-桃花

    求树直径的方法在此转载一下大佬们的分析: 可以随便选择一个点开始进行bfs或者dfs,从而找到离该点最远的那个点(可以证明,离树上任意一点最远的点一定是树的某条直径的两端点之一:树的直径:树上的最长简 ...

  9. 牛客小白月赛8 - E - 诡异数字 数位DP

    牛客小白月赛8 - E - 诡异数字 题意: 求区间中,满足限制条件的数字的个数. 限制条件就是某些数字不能连续出现几次. 思路: 比较裸的数位DP, DP数组开一个dp[len][x][cnt] 表 ...

随机推荐

  1. Enhance Magento 404 page

    Magento default installation already has a predefined custom 404 page (no-route). But is it enough t ...

  2. 汝佳大神的紫书上写错了?uva10048

    算法竞赛入门经典第二版的365页例题11-5噪音.应该是"之和"换成"取最大值","取最小值"还是取最小值 假设我错了,请大家务必指点小弟 ...

  3. asp.net mvc的权限管理设计

    现在集中展示用户-角色-权限管理的功能,因此,所有数据表一律简化处理.   1 后台管理效果 (1)角色管理 (2)权限管理   2 数据库设计(MSSQL) (1)用户表dbo.Users 项 类型 ...

  4. C++常用的函数,好的博客文章整理,集锦

    http://www.cnblogs.com/xianghang123/archive/2011/08/24/2152404.html    c语言产生随机数的方法 http://blog.sina. ...

  5. Spring3+ibatis (SQL Server)+pager-taglib.tld查询分页的实现

    pager-taglib分页開始~ 查了好多关于分页的技术,终于选定下面方法实现~ 1.首先下载jar包:pager-taglib.jar,pager-taglib.jar放在WEB-INF/lib文 ...

  6. [IT学习]从网上获取pdf制作vce文件

    考过IT证书的朋友,都知道什么是vce文件.如果仅仅找到了pdf版本的文件,该如何转为vce文件呢? 具体的步骤如下: 1.到如下网址下载examformatter,http://www.examco ...

  7. 2016/3/30 ①投票checkbox ②进度条两个div套起百分比控制内div(width) <div><div></div></div> ③数据库test2 表 diaoyan... 35岁发展方向投票

    分两个页面,要点:提交form 相连action method  两个页面可以合成一个页面action传到自身页面   但分开较清晰 第一个页面vote.php <!DOCTYPE html P ...

  8. XMU 1606 nc与滴水问题 【模拟】

    1606: nc与滴水问题 Time Limit: 1000 MS  Memory Limit: 64 MBSubmit: 85  Solved: 27[Submit][Status][Web Boa ...

  9. UESTC 982质因子分解

    读入一个自然数,将nn分解为质因子连乘的形式输出. Input 有多组测试数据.输入的第一行是整数TT(0<T≤10000),表示测试数据的组数.每一组测试数据只有一行,包含待分解的自然数nn. ...

  10. git pull ,git fetch ,git merge

    git pull 是git fetch与git merge的组合. 有时候拆开使用,会更加的安全. 比如想比较,本地分支,与线上分支的差别,就可以先 git fetch 这样就可以,git diff ...