BestCoder Round #86
A题 Price List
巨水..........水的不敢相信。
#include <cstdio>
typedef long long LL;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n,m,x;
scanf("%d%d",&n,&m);
LL sum = ;
; i < n; i++)
{
int x;
scanf("%d",&x);
sum = sum + (LL)x;
}
; i < n; i++)
{
LL x;
scanf("%lld",&x);
if(x > sum)
printf(");
else
printf(");
}
printf("\n");
}
;
}
这道题可以用线段树做,查询最大值,每次删掉一个点,等于单点更新一到两个点。之后复原一下即可。
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
#define mem0(x) memset(x,0,sizeof(x))
#define lson l,m,rt << 1
#define rson m+1,r,rt << 1 | 1
+ ];
LL MAX[ << ];
int t;
] , MAX[rt << | ]);}
void build(int l,int r,int rt)
{
] - a[l]); return ;}
;
build(lson);
build(rson);
pushup(rt);
}
void update(int p,int add,int l,int r,int rt)
{
if(l == r) {t = MAX[rt]; MAX[rt] = add; return ;}
;
if(p <= m)
update(p,add,lson);
else
update(p,add,rson);
pushup(rt);
}
LL query_max(int ll,int rr,int l,int r,int rt)
{
if(ll <= l && rr >= r) return MAX[rt];
LL ans = ;
;
if(ll <= m)
ans = max(ans,query_max(ll,rr,lson));
if(rr > m)
ans = max(ans,query_max(ll,rr,rson));
return ans;
}
int main()
{
int T,n;
scanf("%d",&T);
while(T--)
{
mem0(a);
mem0(MAX);
scanf("%d",&n);
; i <= n; i++)
{
scanf("%d",&a[i]);
}
build(,n-,);
LL ans = ;
; i <= n; i++)
{
int t1,t2;
&& i != n)
{
update(i,abs(a[i+]-a[i-]),,n-,),t1 = t;
update(i-,abs(a[i+]-a[i-]),,n-,),t2 = t;
}
else
{
if(i != n)
update(i,,,n-,),t1 = t;
)
update(i-,,,n-,),t2 = t;
}
ans = ans + query_max(,n-,,n-,);
&& i != n)
{
update(i,t1,,n-,);
update(i-,t2,,n-,);
}
else
{
if(i != n)
update(i,t1,,n-,);
)
update(i-,t2,,n-,);
}
}
printf("%I64d\n",ans);
}
;
}
但是这道题的正解是O(n)的算法。不是线段树。
真的感觉 被 虐智商。人家五分钟搞定这道题= =。
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long LL;
+ ;
int a[maxn], r_max[maxn], l_max[maxn];
int main()
{
int T,n;
LL ans;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
; i <= n; i++)
{
scanf("%d",&a[i]);
}
l_max[] = ;
; i <= n; i++)
{//r_max 从左边开始到i的最大值
l_max[i] = max(l_max[i-], abs(a[i] - a[i-]));
}
r_max[n] = ;
; i >= ; i--)
{//l_max 从右边开始到i的最大值
r_max[i] = max(r_max[i+], abs(a[i+] - a[i]));
}
ans = (LL) l_max[n-] + (LL) r_max[];
; i < n; i++)
{
ans = ans + (LL) max(l_max[i-], max(r_max[i+], abs(a[i-] - a[i+]) ) );
}
printf("%I64d\n",ans);
}
;
}
多少个区间里的第k大的数不小于 m。其实就是说如果这个区间里面能找到,k个大于等于m的数,那么这个区间肯定就满足条件,后面的就不需要管了。
尺取法!!!!
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long LL;
+ ];
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
int T,n,m,k;
scanf("%d",&T);
; i < T; i++)
{
scanf("%d%d%d",&n,&m,&k);
; i <= n; i++)
scanf("%d",&a[i]);
;
LL ans = ;
;
; i <= n; i++)
{
while(cnt < k && r < n)
{
r++;
cnt += (a[r] >= m);
}
if(cnt < k) break;
ans = ans + (LL) n - r + ;
cnt -= (a[i] >= m);
}
printf("%I64d\n",ans);
}
;
}
D题
BestCoder Round #86的更多相关文章
- [HDU5807] [BestCoder Round #86 1004] Keep In Touch (DP)
[HDU5807] [BestCoder Round #86 1004] Keep In Touch (DP) 题面 有三个人从一张N个点无重边的有向无环图上的三个点出发,每单位时间,他们分别选择当前 ...
- BestCoder Round #86 解题报告
A.Price List Sol 求和查询 Code #include<cstdio> #include<algorithm> #include<iostream> ...
- HDU 5805 NanoApe Loves Sequence (思维题) BestCoder Round #86 1002
题目:传送门. 题意:题目说的是求期望,其实翻译过来意思就是:一个长度为 n 的数列(n>=3),按顺序删除其中每一个数,每次删除都是建立在最原始数列的基础上进行的,算出每次操作后得到的新数列的 ...
- BestCoder Round #86 部分题解
Price List 题意: 有n件商品,每天只能买一件,并且会记录账本,问有多少次一定记多了? 题解: 就是求和,最后如果大于和就输出1,否则0. 代码: #include <bits/std ...
- HDU5808Price List Strike Back (BestCoder Round #86 E) cdq分治+背包
严格按题解写,看能不能形成sum,只需要分割当前sum怎么由两边组成就好 #include <cstdio> #include <cstring> #include <c ...
- HDU5807 Keep In Touch (BestCoder Round #86 D ) 分布式dp
#include <cstdio> #include <cstring> #include <cmath> #include <vector> #inc ...
- HDU5806 NanoApe Loves Sequence Ⅱ (BestCoder Round #86 C)二分
分析:大于等于m的变成1,否则变成0,预处理前缀和,枚举起点,找到第一个点前缀和大于m即可 找第一个点可以二分可以尺取 #include <cstdio> #include <cst ...
- HDU5805 NanoApe Loves Sequence (BestCoder Round #86 B)前后缀预处理
分析:维护空隙的差,然后预处理前缀最大,后缀最大,扫一遍 #include <cstdio> #include <cstring> #include <cmath> ...
- HDU5804 Price List (BestCoder Round #86 A)水题
分析:大于总和输出1 #include <cstdio> #include <cstring> #include <algorithm> using namespa ...
随机推荐
- NPOI操作Excel时使用列头来读取数据的方法
首先定义扩展方法: public static ICell GetCell(this IRow row, string clounmName) { IRow firstRow = row.Sheet. ...
- 配置maven
http://www.cnblogs.com/liunanjava/archive/2015/11/05/4936037.html
- 四、Shell输入、输出功能和字符颜色设置
一.Shell输入功能 1.键盘输入 方式一: [root@Salve four]# cat test.sh #!/bin/bash #-e 参数可以解析语句中的转义字符 echo -e &quo ...
- Python之路【第一篇】:Python简介和入门
python简介: 一.什么是python Python(英国发音:/ pa θ n/ 美国发音:/ pa θɑ n/),是一种面向对象.直译式的计算机程序语言. 每一门语言都有自己的哲学: pyth ...
- 深入理解javascript原型和闭包(3)——prototype原型
既typeof之后的另一位老朋友! prototype也是我们的老朋友,即使不了解的人,也应该都听过它的大名.如果它还是您的新朋友,我估计您也是javascript的新朋友. 在咱们的第一节(深入理解 ...
- memcache与memcached的区别
其实到底说成什么无所谓,只要你真正理解和知道使用就可以了!但是介于有和我一样学习时遇到的这个疑惑,在此分享下其中的缘由: Memcache是一个软件 Memcache是一个自由和开放源代码.高性能.分 ...
- 1·3 对 git 的认识
我可以诚实的说:这是我第一次听见这个名词 GIT.老师您发的关于git链接我下载了,只是还没看完.所以以下只是片面的理解,在后期我会单独再发一次. 一·GIT的简单介绍 1·Git是一款免费.开源的分 ...
- BlockingQueue 阻塞队列,很有用的一种
BlockingQueue的核心方法:放入数据: offer(anObject):表示如果可能的话,将anObject加到BlockingQueue里,即如果BlockingQueue可以容纳, 则返 ...
- Segment set
题目大意: 在一个平面上,给定N根线段,若某条线段与另一条线段相交,则将它们归于同个集合,给定k,问第k条线段所在的集合中线段的数量. 题目分析: 问题主要考察计算几何和并查集. 首先我们要判断两条线 ...
- webstrom配置sass与less
1.less 安装一个稳定版的node.[例如node-v4.4.4-x64] 然后直接在webstrom里导入那个lessc.cmd 2.sass 安装ruby. 安装完之后点开,Start那个安装 ...