题意

题目链接

给出长度为\(n\)的序列\(a\),序列中的元素取值为\([-2e9, 2e9]\)

找到两个位置\((i, j) (i <j, a[i] < a[j])\),最小化\(a[i] * a[j]\)

Sol

当时在做的时候思路是直接维护大于\(0\)的最大/最小值,小于\(0\)的最大/最小值然从这四个里面转移

然而是有反例的,比如\(-100, -3, -5, -4\)

当时没有仔细往下想。

出现错误的本质原因还是因为负负的正的性质。

那么我们直接来分类讨论一下

整个序列可以分成四种情况

  • 全为正

这时候直接维护出前缀最小值

  • 存在一个位置为正数且前面有负数

同样维护前缀最小值

  • 前一半为正后一半为负

可分成两段分别做

  • 全为负

这是我自己没想出来的,看了dyh的代码只能Orzzz

这时候我们倒着考虑,不难发现一个小于\(0\)的数,乘上小于\(0\)的最大的数,得到的数一定是最小的。

那么直接维护一下最大值就好了。

#include<bits/stdc++.h>
#define LL long long
//#define int long long
#define uint unsigned int
#define chmax(a, b) (a = (a > b ? a : b))
#define chmin(a, b) (a = (a < b ? a : b))
using namespace std;
const int MAXN = 1e7 + 10;
LL mod = 1ll << 32, INF = 9223372036854775806;
inline LL read() {
char c = getchar(); LL x = 0, f = 1;
while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return x * f;
}
int N;
LL L, R, X, Y, Z, a[MAXN];
uint b[MAXN];
LL add(LL x, LL y) {
if(x + y < 0) return x + y + mod;
return x + y >= mod ? x + y - mod : x + y;
}
LL mul(LL x, LL y) {
return 1ll * x * y % mod;
}
void solve() {
N = read();
L = read(); R = read(); X = read(); Y = read(); Z = read(); b[1] = read(); b[2] = read();
for(int i = 3; i <= N; i++) b[i] = (b[i - 2] * X % mod + b[i - 1] * Y % mod + Z) % mod;
for(int i = 1; i <= N; i++) a[i] = b[i] % (R - L + 1) + L;
//puts("");for(int i = 1; i <= N; i++) printf("%d ", a[i]);
//'for(int i = 1; i <= N; i++) a[i] = read();
LL mn = INF, ans = INF;
//cout << ans << endl;
for(int i = 1; i <= N; i++) {
if(mn < a[i]) chmin(ans, mn * a[i]);
chmin(mn, a[i]);
}
mn = -INF;
for(int i = N; i >= 1; i--) {
if(a[i] < mn) chmin(ans, mn * a[i]);
chmax(mn, a[i]);
}
if(ans == INF) printf("IMPOSSIBLE\n");
else cout << ans << endl;
}
signed main() {
for(int T = read(); T; T--, solve());
return 0;
}

cf1090 I.Minimal Product(贪心)的更多相关文章

  1. uva.10020 Minimal coverage(贪心)

    10020 Given several segments of line (int the X axis) with coordinates [Li, Ri]. You are to choose t ...

  2. UVA 10020 Minimal coverage(贪心 + 区间覆盖问题)

     Minimal coverage  The Problem Given several segments of line (int the X axis) with coordinates [Li, ...

  3. ural 1303 Minimal Coverage(贪心)

    链接: http://acm.timus.ru/problem.aspx?space=1&num=1303 按照贪心的思想,每次找到覆盖要求区间左端点时,右端点最大的线段,然后把要求覆盖的区间 ...

  4. CodeForce-797C Minimal string(贪心模拟)

    Minimal string CodeForces - 797C Petya 收到一个长度不超过 105 的字符串 s.他拿了两个额外的空字符串 t 和 u 并决定玩一个游戏.这个游戏有两种合法操作: ...

  5. Minimal coverage (贪心,最小覆盖)

    题目大意:先确定一个M, 然后输入多组线段的左端和右端的端点坐标,然后让你求出来在所给的线段中能够 把[0, M] 区域完全覆盖完的最少需要的线段数,并输出这些线段的左右端点坐标. 思路分析: 线段区 ...

  6. Codeforces Round #667 (Div. 3) B. Minimum Product (贪心,数学)

    题意:给你\(a\)和\(b\)两个数,每次操作可以是任意一个数\(-1\),最多操作\(n\),并且\(a\ge x\),\(b\ge y\),求操作后\(a*b\)的最小值. 题解:观察样例并且在 ...

  7. Contest 7.21(贪心专练)

    这一次都主要是贪心练习 练习地址http://acm.hust.edu.cn/vjudge/contest/view.action?cid=26733#overview Problem APOJ 13 ...

  8. 2018-2019 Russia Open High School Programming Contest

    A. Company Merging Solved. 温暖的签到. #include<bits/stdc++.h> using namespace std; ; typedef long ...

  9. 2018-2019 Russia Open High School Programming Contest (Unrated, Online Mirror, ICPC Rules, Teams Preferred)

    前言 有一场下午的cf,很滋磁啊,然后又和dalao(见右面链接)组队打了,dalao直接带飞我啊. 这是一篇题解,也是一篇总结,当然,让我把所有的题目都写个题解是不可能的了. 按照开题顺序讲吧. 在 ...

随机推荐

  1. 总结day24 ---- socket ,struct 的学习

    前情提要 一:套接字  socket()  1:三次握手 1:客户端像服务端链接,   (第一次握手) 2:服务端收到请求,告诉客户端服务端收到了内容    (第二次握手1) 3:服务端像客户端连接, ...

  2. Hibernate中连接数据库的配置

    Hibernate连接数据库的配置 实体类的映射文件 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mappin ...

  3. Python文件中执行脚本注释和编码声明

    在 Python 脚本的第一行经常见到这样的注释: #!/usr/bin/env python3 或者 #!/usr/bin/python3 含义 在脚本中, 第一行以 #! 开头的代码, 在计算机行 ...

  4. 架构师养成记--25.linux用户管理

    用户管理配置文件用户信息文件:/etc/passwd密码文件:/etc/shadow用户配置文件:/etc/login.defs /etc/default/useradd新用户信息文件:/etc/sk ...

  5. 手动启动 oracle 服务

      手动启动 Oracle 服务 为了学习,我们常常会在个人PC上安装 Oracle 数据库,这大大影响了计算机的运行速度,尤其是计算机开机速度,如果 Oracle 使用频率并不是非常高,我们可以禁止 ...

  6. 使用sqlyog将sql server 迁移到mysql

    使用软件工具sqlyog(64位) sqlyog 迁移步骤 1.使用sqlyog连接目标数据库 连接目标数据库 2.选择目标数据库(需要先把表结构建好,从SQL Server同步表结构也可以使用工具, ...

  7. 不支持这个操作系统WNT_6.3I_64

    安装winserver2012驱动时,经常会因为版本的关系,出现向后兼容问题: 编辑驱动安装配置ini, 添加向后兼容的标识即可:WNT_6.3I_64= Win81_64 删除system下的程序( ...

  8. [Xamarin] 製作吐司(Toast)以及圖文並茂的Toast (转帖)

    最近在看Xamarin使用C#來撰寫Android App . 紀錄一下,順便給之後有需要的人可以有所參考 :) 今天要來聊的是關於Toast 這東西,這在以前Android 上面我是很常使用 拿來l ...

  9. 从var func=function 和 function func()区别谈Javascript的预解析机制

    var func=function 和 function func()在意义上没有任何不同,但其解释优先级不同:后者会先于同一语句级的其他语句. 即: { var k = xx(); function ...

  10. Scala IDEA for Eclipse里用maven来创建scala和java项目代码环境(图文详解)

    这篇博客 是在Scala IDEA for Eclipse里手动创建scala代码编写环境. Scala IDE for Eclipse的下载.安装和WordCount的初步使用(本地模式和集群模式) ...