突然就提到了这个东西,为了不再出现和去年联赛看见二分没学二分痛拿二等第一的情况,就去学了一下,基础还是比较简单的……

先看一个经典例题:

给定一个长度为n的数列{a1,a2...an},每次可以选择一个区间[l,r],使这个区间内的数都加一或者都减一。
问至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列有多少种。

对于100%的数据,n=100000,0<=ai<2147483648。

注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong 注意longlong

恩,查分的基础是给数列两两做差

在原数列a的基础上,b[1]=a[1],b[i]=a[i]-a[i-1]

这道题中每次给[l,r]区间同时+1,就相当于给b[l-1]+1,b[r]-1,区间-1同理

因为整个区间同时更改,所以区间内部的差不变,b在l-1和r中间的值都没有变

所以求出b中所有正数的和p,和负数绝对值的和q,让他们消掉,很容易看出来第一问答案就是max(p,q)(注意q是绝对值)

然后还会有abs(p,q)的值没有消掉,这abs(p,q)的值可以自己消(长度为1的区间更改),也可以和b1消(中间的值不会变,b1左边没数无所谓)

所以第二问答案就是abs(p,q)+1

希望联赛不要搞出什么魔性的应用来qaq

代码:

  1. //3_108_120_116
  2. #include<iostream>
  3. #include<cstdio>
  4. #include<algorithm>
  5. #include<cstring>
  6. #include<cmath>
  7. using namespace std;
  8. long long read(){long long z=,mark=; char ch=getchar();
  9. while(ch<''||ch>''){if(ch=='-')mark=-; ch=getchar();}
  10. while(ch>=''&&ch<=''){z=(z<<)+(z<<)+ch-''; ch=getchar();}
  11. return z*mark;
  12. }
  13. inline long long abs(long long x,long long y){return (x>y)?x-y:y-x;}
  14. long long n,a[];
  15. long long b[];
  16. long long p=,q=;
  17. int main(){//freopen("ddd.in","r",stdin);
  18. cin>>n;
  19. for(int i=;i<=n;i++) a[i]=read();
  20. b[]=a[];
  21. for(int i=;i<=n;i++){
  22. b[i]=a[i]-a[i-];
  23. if(b[i]>) p+=b[i];
  24. else q+=b[i];
  25. }
  26. cout<<max(p,-q)<<endl<<abs(p,-q)+<<endl;
  27. return ;
  28. }

差分:IncDec Sequence 差分数组的更多相关文章

  1. 【bzoj3043】IncDec Sequence 差分

    题目描述 给定一个长度为n的数列{a1,a2...an},每次可以选择一个区间[l,r],使这个区间内的数都加一或者都减一.问至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下 ...

  2. BZOJ 3043: IncDec Sequence 差分 + 思维

    Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) ...

  3. 【BZOJ 3043】 3043: IncDec Sequence (差分)

    3043: IncDec Sequence Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 589  Solved: 332 Description 给 ...

  4. [bzoj3043]IncDec Sequence_差分

    IncDec Sequence 题目大意:给定一个长度为n的数列{a1,a2...an},每次可以选择一个区间[l,r],使这个区间内的数都加一或者都减一.问至少需要多少次操作才能使数列中的所有数都一 ...

  5. 前缀和与差分之IncDec sequence

    参考链接:https://blog.csdn.net/hzk_cpp/article/details/80407014 题目链接:https://www.acwing.com/problem/cont ...

  6. CH-0304 IncDec Sequence

    0304 IncDec Sequence 0x00「基本算法」例题 描述 给定一个长度为 n(n≤10^5 ) 的数列 {a_1,a_2,…,a_n},每次可以选择一个区间 [l,r],使下标在这个区 ...

  7. Poetize6: IncDec Sequence

    3043: IncDec Sequence Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 233  Solved: 132[Submit][Statu ...

  8. 【BZOJ3043】IncDec Sequence 乱搞

    [BZOJ3043]IncDec Sequence Description 给定一个长度为n的数列{a1,a2...an},每次可以选择一个区间[l,r],使这个区间内的数都加一或者都减一.问至少需要 ...

  9. BZOJ 3043: IncDec Sequence

    3043: IncDec Sequence Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 578  Solved: 325[Submit][Statu ...

随机推荐

  1. Oracle存储过程中异常Exception的捕捉和处理

    Oracle存储过程中异常的捕捉和处理 CREATE OR REPLACE Procedure Proc_error_process ( v_IN in Varchar2, v_OUT Out Var ...

  2. 移除project,testsuite,testcase级别所有的custom properties

    // Remove all custom properties on Project level. If removed, custom properties cannnot be injected ...

  3. Linux Shell脚本编程--Head/Tail命令详解

    head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾,看看下面的范例:## ( ...

  4. 算法-MergeSort

    #include <iostream> #include <vector> #include <iterator> using namespace std; ; v ...

  5. Dapper学习笔记(2)-链接引用

    在研究Dapper源码时发现Dapper NET45类库中的SqlMapper.cs文件前面有个蓝色的箭头图标,发现在Dapper NET45文件夹下根本不存在SqlMapper.cs文件,其文件属性 ...

  6. [Python]记录详细调用堆栈的日志

    参考http://www.cnblogs.com/tuzkee/p/3243110.html import sys import os def detailtrace(info): retStr = ...

  7. Tabbed Activity的使用(Fragment)

    1,首先file -> new -> Activity -> Tabbed Activity 2,创建完成后,发现会自动的创建一大堆代码,大部分我们是不需要关心的,关于页面切换的代码 ...

  8. 深入浅出REST

    不知你是否意识到,围绕着什么才是实现异构的应用到应用通信的“正确”方式,一场争论正进行的如火如荼:虽然当前主流的方式明显地集中在基于SOAP.WSDL和WS-*规范的Web Services领域,但也 ...

  9. linux通过端口号查找程序执行路径

    第一种: 查看ssh服务 [root@localhost shell]# netstat -anlp | grep :22tcp        0      0 0.0.0.0:22          ...

  10. MySql使用游标Cursor循环(While)更新数据

    #要修改的变量 DECLARE var_ID VARCHAR(50) DEFAULT ''; #需要修改的数据的数量 DECLARE var_UpdateCount INT; #当前循环次数 DECL ...