yinchuan-B The Great Wall

给出n个数,将其划分为k个区间,要求每个区间当中的最大数和最小数的差值之和最大。求k从1到n的答案。
n <= 1e4

因为这个题开始学四边形优化,其实会了之和回头看感觉还是蛮简单的,w(i,j)w(i,j)w(i,j)的四边形不等式很好证明,然后用个ST表来实现O(1)O(1)O(1)的查询,1e8的空间还是有点大,所以学着写了滚动数组。

这个代码是按照印象中的题意随便糊的,就过了一下样例,没有在oj上进行测试。

const int N = 10010, inf = 1e9;
int m[N][2], dp[N][2], STmin[N][20], STmax[N][20], lg2[N];void init(int len)
{for (int k = 1; (1 << k) < len; k ++)for (int i = 1; i + (1 << k) - 1 <= len; i ++){STmin[i][k] = min(STmin[i][k - 1], STmin[i + (1 << (k - 1))][k - 1]);STmax[i][k] = max(STmax[i][k - 1], STmax[i + (1 << (k - 1))][k - 1]);}for (int i = 2; i <= len; i ++)lg2[i] = lg2[i >> 1] + 1;return;
}inline int w(int l, int r)
{int len = r - l + 1;int mx = max(STmax[l][lg2[len]], STmax[r - (1 << lg2[len]) + 1][lg2[len]]);int mn = min(STmin[l][lg2[len]], STmin[r - (1 << lg2[len]) + 1][lg2[len]]);return mx - mn;
}int main()
{int T = 1;//T = read();while (T --){int n;n = read();for (int i = 1; i <= n; i ++){STmin[i][0] = read();STmax[i][0] = STmin[i][0];}init(n);int now = 0;for (int i = 1; i <= n; i ++)dp[i][now] = w(1, i);printf ("%d\n", dp[n][now]);for (int j = 2; j <= n; j ++){now ^= 1;m[n + 1][now] = n;for (int i = n; i >= 1; i --){int mx = -inf, p;for (int k = max(m[i][now ^ 1], j - 1); k <= min(m[i + 1][now], i - 1); k ++){if (mx < dp[k][now ^ 1] + w(k + 1, i)){mx = dp[k][now ^ 1] + w(k + 1, i);p = k;}}dp[i][now] = mx;m[i][now] = p;}printf ("%d\n", dp[n][now]);}}return 0;
}`

Yinchuan-B The Great Wall相关推荐

  1. Java解惑 电子书

    --表达式谜题 Java 谜题 1--表达式谜题 谜题 1:奇数性 下面的方法意图确定它那唯一的参数是否是一个奇数.这个方法能够正确运转 吗? public static boolean isOdd( ...

  2. The 2020 ICPC Asia Yinchuan Regional Programming Contest 银川 B. The Great Wall 题解

    题目链接:Problem - B - Codeforces input1: 5 1 2 3 4 5 output1: 4 3 2 1 0 input2: 5 1 2 1 2 1 output2: 1 ...

  3. 【POJ1113】Wall(凸包)

    [题目] Description Once upon a time there was a greedy King who ordered his chief Architect to build a ...

  4. gcc 常用命令-Wall

    -Wall GCC还有一些其它编译选项也能够产生有用的警告信息.这些选项大多以-W开头,其中最有价值的当数-Wall了,使用它能够使GCC产生尽可能多的警告信息. 转载于:https://www.cn ...

  5. ZOJ 2747 Paint the Wall(离散化+暴力)题解

    题意:给你一个面,然后涂颜色,问你最后剩多少颜色,每种颜色面积. 思路:第一反应是二维线段树,代码又臭又长,可以做.但是这题暴力+离散化就可以过.可以看到他给的n只有100,也就是说最坏情况下会涂10 ...

  6. linux上给其他在线用户发送信息(wall, write, talk, mesg)

    linux上给其他在线用户发送信息(wall, write, talk, mesg) 2018-01-05 lonskyMR 转自 恶之一眉 修改 微信分享: 设置登录提示 /etc/motd文件的用 ...

  7. 终端读写命令 -- read write wall

    我们在使用 C 语言时,如果使用文件操作,不可避免的会使用 read write 命令.当然,Shell 中也是存在 read 和 write 的,不过,它们的作用不是对文件进行操作,而是多其他的终端 ...

  8. makefile使用--Wall选项(二)

    -Wall:选项可以打印出编译时所有的错误或者警告信息.这个选项很容易被遗忘,编译的时候,没有错误或者警告提示,以为自己的程序很完美,其实,里面有可能隐藏着许多陷阱.变量没有初始化,类型不匹配,或者类 ...

  9. [IOI2014]Wall

    [IOI2014]Wall 题目大意: 给你一个长度为\(n(n\le2\times10^6)\)的数列,初始全为\(0\).\(m(m\le5\times10^5)\)次操作,每次让区间\([l_i ...

  10. [转][Timer学习]wall time和monotonic time

    在一些系统调用中需要指定时间是用CLOCK_MONOTONIC还是CLOCK_REALTIME,以前总是搞不太清楚它们之间的差别,现在终于有所理解了. CLOCK_MONOTONIC是monotoni ...

最新文章

  1. 2!=5 or 0在python中是否正确-python中的if判断语句
  2. Python操作Rabbit MQ的5种模式
  3. 分页存储管理和分段存储管理
  4. MSSQL2000 数据库文件迁移到 MSSQL2005 可能要用的一些命令
  5. CF809C(找规律+数位DP)
  6. 217. Contains Duplicate
  7. python求矩阵的秩_Python 实现线性代数计算器
  8. 4-2   ADO.NET-查询和检索数据1
  9. 页面每次添加都显示最后一次访问记录spring scope=prototype 学习笔记
  10. 推荐算法实现java_利用Java写开源库 覆盖70多种推荐算法
  11. Python Flask Web 第十课 —— flask-wtf
  12. Django 国际化和本地化
  13. 微波雷达感应模块技术,实时智能检测人体存在,静止微小动静感知
  14. 如何查找论文是否被SCI,EI检索
  15. 淘客部分功能实现源码
  16. Ubuntu安装搜 狗输入法,最完整的步骤
  17. CryEngine3 调试Shader方法
  18. LPC1768PWM实验
  19. App首屏接口性能优化
  20. 河海大学计算机科学与技术考研,2021年河海大学计算机科学与技术(081200)考研专业目录_硕士研究生考试范围 - 学途吧...

热门文章

  1. hive ALLOW_UNQUOTED_CONTROL_CHARS
  2. Eclipse打JAR包引用的第三方JAR包找不到 问题解决
  3. HTML5 使用 JS 生成二维码,带头像
  4. 线程系列5--java中的ThreadLocal类实现线程范围内的数据共享(二)
  5. (转)利用CAS算法实现通用线程安全状态机
  6. Java文件下载详解
  7. linux源码阅读笔记 fork函数
  8. 程序员该做的事 - 每天、每周、每月
  9. Button的点击事件
  10. ajax请求目标地址,AJAX功能目标