bzoj5277: [Usaco2018 Open]Out of Sorts
被tkj大爷艹爆了5555整套模拟赛都是神仙思路题
那么这题题解

还有一个神仙做法,zory巨神在考场上找规律AC,自己都不会证。。我证明了一下(然而这货还是不认可自己的做法)
按照分割点的思路,我们for循环一次,每次找到比当前点小且最远的点,ans+=j-i+1。毫无疑问,当前点的位移到该点之后停止,分割点的产生时间也就是距离。对于一个数,停下当且仅当它撞到了比他大的数,考虑计数和实际走的差别,对于两个数x,y,x在前且<y,设a是x的目标点,b是y的目标点,必有a<b,可以发现对于计数,第一次加上的是x~y y~a,第二次加上的是y~a a~b的贡献,而实际上,第一次加的是x~y y~a a~b,第二次加的是y~a,而这两个值是相等的。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL;
const LL mod=1e9+;
int read()
{
int x=,f=;char ch=getchar();
while(ch<''||''<ch){if(ch=='-')f=-;ch=getchar();}
while(''<=ch&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
} LL a[],up[],lw[];
LL l[],suml[],sumli[];
int main()
{
int n,x,y;
n=read();
for(int i=;i<=n;i++)
x=read(), y=read(), a[x]=y; //----------------------------------------------------- up[n-]=a[n-];for(int i=n-;i>=;i--)up[i]=max(up[i+],a[i]);
lw[]=a[]; for(int i=;i<n;i++) lw[i]=min(lw[i-],a[i]); int now=n;
for(int i=;i<n;i++)
while(now>lw[i])l[--now]=i;
while(now>)l[--now]=n-; for(int i=n-;i>=;i--)
{
suml[i]=(suml[i+]+l[i])%mod;
sumli[i]=(sumli[i+]+l[i]*(n-i)%mod)%mod;
} //----------------------------------------------------- LL ans=,d;
for(int i=;i<=n;i++)
{
d=(i*(up[i]-lw[i])*(up[i]+lw[i]+)/)%mod;
ans=(ans+d)%mod; d=i*lw[i]%mod*(up[i]-lw[i])%mod;
ans=((ans-d)%mod+mod)%mod; d=(sumli[lw[i]]-sumli[up[i]])%mod-(suml[lw[i]]-suml[up[i]])*(n-up[i])%mod;
ans=((ans-d)%mod+mod)%mod;
}
printf("%lld\n",ans); return ;
}
bzoj5277: [Usaco2018 Open]Out of Sorts的更多相关文章
- [bzoj5278][Usaco2018 Open]Out of Sorts
有点厉害,,,不会啊 答案就是所有前i个数有多少不在前i个里的max? 为啥啊求助
- bzoj 5277: [Usaco2018 Open]Out of Sorts【冒泡排序瞎搞】
首先考虑快排的递归什么时候停下,显然是当前段只剩下一个数了,也就是一个数两边出现分隔符 然后再考虑计算冒泡长度这个操作,因为有分割,所以我们可以把这些放到一起冒泡,这和递归每个区间冒泡是等价的 所以答 ...
- Uva 110 - Meta-Loopless Sorts(!循环,回溯!)
题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...
- Uva110 Meta-Loopless Sorts
Meta-Loopless Sorts Background Sorting holds an important place in computer science. Analyzing and i ...
- UVA 110 Meta-Loopless Sorts(输出挺麻烦的。。。)
Meta-Loopless Sorts Background Sorting holds an important place in computer science. Analyzing and ...
- 普林斯顿大学算法课 Algorithm Part I Week 3 排序的应用 System Sorts
排序算法有着广泛的应用 典型的应用: 排序名称 排序MP3音乐文件 显示Google的网页排名的搜索结果 按标题顺序列出RSS订阅 排序之后下列问题就变得非常简单了 找出中位数(median) 找出统 ...
- 【BZOJ5188】 [Usaco2018 Jan]MooTube
BZOJ5188 [Usaco2018 Jan]MooTube 突然发现BZOJ没有题目,放题面. 题意翻译 题面描述 在业余时间,Farmer John创建了一个新的视频共享服务,他将其命名为Moo ...
- BZOJ5196: [Usaco2018 Feb]Taming the Herd(DP暴力)
5196: [Usaco2018 Feb]Taming the Herd Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 78 Solved: 71[ ...
- BZOJ5194: [Usaco2018 Feb]Snow Boots(排序&set)(可线段树优化)
5194: [Usaco2018 Feb]Snow Boots Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 102 Solved: 79[Subm ...
随机推荐
- python--3、 可迭代对象、迭代器、生成器
可迭代对象 iterable 可直接作用于for循环的对象统称为可迭代对象. 有 list. dict.tuple.set.str等数据类型,还有 generator(包括生成器和带yield的gen ...
- 百鸡百钱===百马百担====for循环嵌套
package com.zuoye.test;//百鸡百钱5文钱可以买一只公鸡,3文钱可以买一只母鸡,1文钱可以买3只雏鸡.public class Baiji { public static voi ...
- Java_Web之分层架构
当我们把业务处理的代码与JSP代码混在一起,不易于阅读,不易于代码维护,这就需要分层. 分层模式 1.分层模式是最常见的一种架构模式 2.分层模式是很多架构模式的基础 分层 将解决方案的组件分隔到不同 ...
- 使用pelican创建静态博客
创建工作目录 首先使用pip安装pelican和markdown pip install pelican markdown 然后创建目录 mkdir my_blog 接着进入目录cd my_blog, ...
- eslint推荐编码规范和airbnb推荐编码规范
Eslint规范 for 循环禁止使用无限循环(这个非默认推荐) // bad for (var i = 0; i < 10; i--) { } for (var i = 10; i >= ...
- rabbitmq-3.5.1-安裝
系统版本:CentOS 6.5RabbitMQ-Server:3.5.1一.安装erlang1.安装准备,下载安装文件 wget https://packages.erlang-solutions.c ...
- AndroidStudio 内存泄漏的分析过程
前言部分这次泄漏是自己代码写的太随意引起的,讲道理,代码写的太为所欲为了,导致有些问题根本就很难发现. 泄漏产生的原因,由于activity未被回收导致.这里给我们提出的一个警示,在使用上下文的时候, ...
- 【剑指Offer】32、把数组排成最小的数
题目描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. ...
- SDOI2017数字表格
求$\prod_{i=1}^n\prod_{j=1}^n\text{Fib}[\gcd(i,j)]\;\text{mod}\;10^9+7$的值 令$n\leq m$,则有: \begin{align ...
- [kuangbin带你飞]专题1-23题目清单总结
[kuangbin带你飞]专题1-23 专题一 简单搜索 POJ 1321 棋盘问题POJ 2251 Dungeon MasterPOJ 3278 Catch That CowPOJ 3279 Fli ...