C2. Pokémon Army (hard version)

http://codeforces.com/problemset/problem/1420/C2

题解:序列是一个起伏的形状,答案其实就是所有极大值减除边界外的所有最小值,除去边界可以这样a[0]=a[n+1]=-1

然后修改的时候只会影响L的左右,R的左右,直接模拟做就可以了

#include<bits/stdc++.h>
using namespace std;#define ll long long
const int maxn=3e5+5;
int a[maxn],n;
ll ans;void insert(int i)
{if(i==0||i>n)return;if(a[i]>a[i-1]&&a[i]>a[i+1])ans+=a[i];if(a[i]<a[i-1]&&a[i]<a[i+1])ans-=a[i];
}void erase(int i)
{if(i==0||i>n)return;if(a[i]>a[i-1]&&a[i]>a[i+1])ans-=a[i];if(a[i]<a[i-1]&&a[i]<a[i+1])ans+=a[i];
}int main()
{int t,q,l,r;scanf("%d",&t);while(t--){scanf("%d%d",&n,&q);a[0]=a[n+1]=-1; ans=0;for(int i=1;i<=n;i++)scanf("%d",&a[i]);for(int i=1;i<=n;i++)insert(i);printf("%lld\n",ans);while(q--){scanf("%d%d",&l,&r);if(l==r){printf("%lld\n",ans);continue;}erase(l); erase(l+1); erase(l-1);if(l+1<r-1)erase(r-1);if(l+1<r)erase(r);erase(r+1);swap(a[l],a[r]);insert(l); insert(l-1); insert(l+1);if(l+1<r-1)insert(r-1);if(l+1<r)insert(r);insert(r+1);printf("%lld\n",ans);}}return 0;
}

C2. Pokémon Army (hard version)相关推荐

  1. C2. Pokémon Army (hard version)(贪心分治)

    C2. Pokémon Army (hard version) (贪心&分治) 思路:局部最优解→\rightarrow→全局最优解. 显然答案数组长度为奇数,因为ai>0a_i> ...

  2. C2 - Pokémon Army (hard version)(思维+差分/线段树+dp)详解

    https://codeforces.com/contest/1420/problem/C2 这道题十分的锻炼思维,也让我知道了同样是差分,从前面减后面和从后面减前面是有不同的意义的. 还记得c1吗? ...

  3. 差分 ---- Codeforces Round #672 (Div. 2):C2. Pokémon Army (hard version)[差分的思想]

    题目链接 题目大意:就算给你一序列,按照顺序出若干个数组成一个的序列,然后对这个序列定义一个权值就算奇数位置的和减去偶数位置的和,问你能的到的最大的权值是多少? **a1 - a2 + a3 - a4 ...

  4. Codeforces Round #672 (Div. 2) C2 - Pokémon Army (hard version)(贪心,维护变化值)

    x数组里选一个子数组y(原数组顺序),y1-y2+y3-y4+- 的最大值 然后还有q次交换操作,每次修改之后都要输出新的最大值 (1)如果没有修改,单纯对于当前数组考虑,我们最后选出来的点肯定是波峰 ...

  5. codeforces C2. Pokémon Army (hard version)(模拟)

    原题链接 //#pragma GCC optimize("Ofast") //#pragma GCC target("avx,avx2,fma") //#pra ...

  6. 1420C1. Pokémon Army (easy version)

    C1. Pokémon Army (easy version):题目 题意:选择其中一部分,按照+-依此计算,求总和 思路:找到局部最大值,然后减去局部最小值,依此找. #include <bi ...

  7. C1. Pokémon Army (easy version)(DP)

    C1. Pokémon Army (easy version)(DP) 思路:dpdpdp. 考虑:分数组长度的奇偶性进行dpdpdp. 令dp[i][0]dp[i][0]dp[i][0]表示前iii ...

  8. Pokémon Army (easy version)

    cf 1420: C1 这是个简单题版的题目,只需要判断加一个数减一个数的最大值. #include<bits/stdc++.h> #include<algorithm> #i ...

  9. C1. Pokémon Army (easy version)(栈模拟)

    有 n 个数,从中选出任意 x (x 为随机数)个数但是不能打乱顺序,有 p 次操作,可以交换对应两个数的位置 现在要求你选出的这几个数中 能够构成  a1-a2+a3-a4--ax  值最大 输出最 ...

最新文章

  1. 一个不错的windows编程网址
  2. 一篇文章带初学者明白:什么是编译器,什么是集成开发环境(IDE)?
  3. 《Python编程从入门到实践》记录之测试代码(unitttest模块)
  4. mysql conflict语句_详细解读MySQL事务
  5. 【mybatis】一对一关联查询
  6. babel-loader jsx SyntaxError:意外令牌[重复]
  7. FTP服务器windows配置
  8. [GO]并发实现聊天室服务器
  9. Linux与FreeBSD的多网卡绑定增加服务器流量
  10. 教你详细制作flash游戏青蛙(附源代码)
  11. 一组NOKIA数据线电路图及制作图例
  12. 思科模拟器-实验 18 三层交换访问控制列表配置
  13. Saas平台接入商户代小程序开发解决方案
  14. BZOJ4167 : 永远的竹笋采摘
  15. Real-Time High-Resolution Background Matting
  16. C语言学习笔记第五天_项目训练
  17. cs与msf的联合使用
  18. unturned服务器重置,服务器配置文件Config.json说明
  19. java编写水数仙花,【360高手联盟-小仙】【JAVASE编程基础】02-JAVA程序的基本结构和基础语法...
  20. 【LT-2】L1-2 两小时学完C语言 (5 分) Q.JPG 知乎上有个宝宝问:“两个小时内如何学完 C 语言?”当然,问的是“学完”并不是“学会”。 假设一本 C 语言教科书有 N 个字,这个

热门文章

  1. 操作系统原理实验(5):内存管理
  2. BELLMAN-FORD算法 求有边数限制的最短路
  3. html复习第六天 京东首页布局(导航栏/左侧)
  4. html图片十字形,CSS3 十字架
  5. Android 内存被异常回收后直接重启APP
  6. 简单安装与配置mysql数据库(绿色版)
  7. android 适配7.0,Android7.0适配心得(一)_拍照兼容
  8. 2021-03-31
  9. java 生成word目录_java代码生成word目录
  10. 从汇编指令解决浮点数疑问