U4858 sum

题目提供者666sb666

最新讨论

题目背景

定义一个序列的价值为序列中相邻元素差的绝对值之和。

如序列{2,1,3}的价值为|2-1|+|1-3|=3,而序列{4}的价值为0。

题目描述

现对于一给定序列,求价值最大的子序列的数量。

保证原序列中相邻的两个数不同。

注意:子序列不用连续

输入输出格式

输入格式:

第一行一个正整数n,表示序列中元素的个数。

接下来n行,每行一个数表示序列中的一个元素。

输出格式:

一个数表示数量。答案对1000000007取模。

输入输出样例

输入样例#1:

3

1

2

3

输出样例#1:

2

说明

样例解释:

40%:n<=1000

100%:n<=100000

数组中的元素的范围在int内

/*
恩想到正解了.
恩想的太多+码力太差.
W到挺.
*/
#include<iostream>
#include<cstdio>
#define MAXN 100001
#define mod 1000000007
#define LL long long
using namespace std;
LL s[MAXN],n,tot,a[MAXN],ans=1,t;
LL read()
{
LL x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
return x*f;
}
LL ab(int x,int y)
{
if(x-y<=0) return y-x;
return x-y;
}
LL mi(LL a,LL b)
{
LL tot=1;
while(b)
{
if(b&1) tot=(tot*a)%mod;
a=(a*a)%mod;
b>>=1;
}
return tot;
}
int main()
{
n=read();
for(int i=1;i<=n;i++) a[i]=read();
for(int i=2;i<=n;i++)
{
if(a[i]<a[i-1]) t++;
else if(t>1) ans=(ans*mi(2,t-1))%mod,t=0;
}
if(t>1) ans=(ans*mi(2,t-1))%mod,t=0;
for(int i=2;i<=n;i++)
{
if(a[i]>a[i-1]) t++;
else if(t>1) ans=(ans*mi(2,t-1))%mod,t=0;
}
if(t>1) ans=(ans*mi(2,t-1))%mod;
cout<<ans;
return 0;
}
/*
正解还是比较好想的.
观察一下有的数是没有贡献的.
比如
1 2 3 4 5 4 3 2 1.
ans就是|5-1|+|1-5|.
那么中间的数可选可不选.
用乘法原理就可以了.
*/
#include<iostream>
#include<cstdio>
#define MAXN 100001
#define mod 1000000007
#define LL long long
using namespace std;
LL s[MAXN],n,tot,a[MAXN],ans=1,t;
LL read()
{
LL x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
return x*f;
}
LL ab(int x,int y)
{
if(x-y<=0) return y-x;
return x-y;
}
LL mi(LL a,LL b)
{
LL tot=1;
while(b)
{
if(b&1) tot=(tot*a)%mod;
a=(a*a)%mod;
b>>=1;
}
return tot;
}
int main()
{
n=read();
for(int i=1;i<=n;i++) a[i]=read();
for(int i=2;i<=n;i++)
{
if(a[i]<a[i-1]) t++;
else if(t>1) ans=(ans*mi(2,t-1))%mod,t=0;
}
if(t>1) ans=(ans*mi(2,t-1))%mod,t=0;
for(int i=2;i<=n;i++)
{
if(a[i]>a[i-1]) t++;
else if(t>1) ans=(ans*mi(2,t-1))%mod,t=0;
}
if(t>1) ans=(ans*mi(2,t-1))%mod;
cout<<ans;
return 0;
}

洛谷比赛 U4858 sum的更多相关文章

  1. 洛谷比赛 「EZEC」 Round 4

    洛谷比赛 「EZEC」 Round 4 T1 zrmpaul Loves Array 题目描述 小 Z 有一个下标从 \(1\) 开始并且长度为 \(n\) 的序列,初始时下标为 \(i\) 位置的数 ...

  2. 洛谷P2398 GCD SUM (数学)

    洛谷P2398 GCD SUM 题目描述 for i=1 to n for j=1 to n sum+=gcd(i,j) 给出n求sum. gcd(x,y)表示x,y的最大公约数. 输入输出格式 输入 ...

  3. 洛谷比赛 U5442 买(最长链)

    U5442 买 题目提供者bqsgwys 标签 树形结构 树的遍历 洛谷原创 题目背景 小E是个可爱的电路编码员. 题目描述 一天小E又要准备做电路了,他准备了一个电路板,上面有很多个电路元器件要安装 ...

  4. 洛谷比赛 Joe的数

    /* 开始暴力+滚动数组70 后来发现不用循环很多 找p的倍数 找%p意义下为0的就好了 */ #include<iostream> #include<cstdio> #inc ...

  5. 洛谷P2398 GCD SUM [数论,欧拉筛]

    题目传送门 GCD SUM 题目描述 for i=1 to n for j=1 to n sum+=gcd(i,j) 给出n求sum. gcd(x,y)表示x,y的最大公约数. 输入输出格式 输入格式 ...

  6. 洛谷P2398 GCD SUM

    题目描述 for i=1 to n for j=1 to n sum+=gcd(i,j) 给出n求sum. gcd(x,y)表示x,y的最大公约数. 输入输出格式 输入格式: n 输出格式: sum ...

  7. 洛谷 P2398 GCD SUM || uva11417,uva11426,uva11424,洛谷P1390,洛谷P2257,洛谷P2568

    https://www.luogu.org/problemnew/show/P2398 $原式=\sum_{k=1}^n(k\sum_{i=1}^n\sum_{j=1}^n[(i,j)=k])$ 方法 ...

  8. 洛谷比赛 堕落的Joe

    /*暴力50*/ #include<iostream> #include<cstdio> #include<cstring> #define maxn 100010 ...

  9. 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解

    今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...

随机推荐

  1. Ruby Rails学习中:网站导航,Bootstrap和自定义的CSS,局部视图

    添加一些结构 一.网站导航 1.添加一些结构后的网站布局文件 打开文件:app/views/layouts/application.html.erb 简单介绍一下,添加的代码: 我们从上往下看一下这段 ...

  2. ale.js 对比其他框架

    欢迎!我们相信你来这里的目的就是为了解 Ale 与其他大型框架的区别,这也正是我们想要在此回答的. 客观来说,作为 Ale 的核心开发者,我们肯定会更偏爱 Ale,认为对于某些问题来讲用 Ale 解决 ...

  3. Array Product CodeForces - 1042C (细节)

    #include <iostream> #include <sstream> #include <algorithm> #include <cstdio> ...

  4. Graph、DFS、BFS

    Graph.java package Graph; import LinearLIst.bag.Bag; import edu.princeton.cs.algs4.In; public class ...

  5. SQL注入之DVWA平台测试mysql注入

    今天主要针对mysql常用注入语句进行测试. 测试环境与工具: 测试平台:DVWA,下载地址:http://down.51cto.com/data/875088,也可下载metaspolit-tabl ...

  6. redis 学习(18)-- AOF

    redis -- AOF 什么是 AOF 通过日志方式将redis中的写命令进行日志记录,保存在硬盘文件中. 日志记录的实质是将写命令写在硬盘的缓冲区中,再根据相关策略把数据刷新到磁盘中. 当redi ...

  7. O027、看nova-scheduler如何选择计算节点

    参考https://www.cnblogs.com/CloudMan6/p/5441782.html   本节重点介绍 nova-scheduler 的调度机制和实现方法:即解决如何选择在那个计算节点 ...

  8. px自动换算rem

    //designWidth:设计稿的实际宽度值,需要根据实际设置//maxWidth:制作稿的最大宽度值,需要根据实际设置//这段js的最后面有两个参数记得要设置,一个为设计稿实际宽度,一个为制作稿最 ...

  9. 公司最喜欢问的Java集合类

    java.util包中包含了一系列重要的集合类,而对于集合类,主要需要掌握的就是它的内部结构,以及遍历集合的迭代模式. 接口:Collection Collection是最基本的集合接口,一个Coll ...

  10. 重装系统失败后怎么用好系统U盘启动解决?

    很多朋友在第一次重装电脑系统时都会出现这样或那样的错误,导致重装系统后进不去系统,非常的被动.那么当我们遇到这种情况该怎么办呢?其实我们可以使用好系统U盘启动来解决重装系统后进不去的问题. 好系统U盘 ...