19-11-06-&
你&我处于这里……在一起?
$$\text{%%%Wearry}$$
ZJ:
一遇到Wearry的思维题就得×得够呛。
考试心态炸裂,码上三个暴力然后就不知道该干啥了。
现在就想敲自己。
不要放弃一点点分!
37
|
Miemeng | 20
00:00:22
|
0
00:00:23
|
0
00:00:23
|
20
00:00:23
|
摁 end 键就能找到我啦!
UPD:
××晚上梦见自己省三是不是要死了???
TJ:
先改了下T2,觉得再不写博客就AFO了非常妙然后先写个。
T2:
考试根本没想法,($12$的数据范围意思就是$O(N!) \sim O(1)$都……)
一点提示都没有(主要是自己太菜啥都没想出来)
首先应该转换题意。
如果你真的想把中间的变成最大的,为什么不把小的放在左右两边呢?
因为并没有规定最大值的位置。
这样的转换(感性理解)是正确的。
所以……
$10\%$算法
每次找区间最小值,然后比较它距离左右的距离,然后暴力向短的方向左右移。
不要问我为什么$10\%$,此算法并没有考虑同等大小的数的优先级。
$30\%$算法
考虑区间里如果有两个最小值怎么办?
从贪心的角度看,应该将距离左/右侧最小的进行移动。
我们证明这种操作的正确性。
现在有左右两个相同小的值,它们之间的值全部比它们大所以就不具体画出了。
那么我们就又有许多情况。
右向左($B>A+k'$) | 右向右($B<A+k'$) | |
左向左 $(A<B+k)$ |
先让左向左会更优 |
没有顺序的影响。 两种操作顺序不影响答案 |
左向右 $(A>B+k)$ |
有可能?? |
先让右向右答案更优 |
那么我们解简单不等式:
当$A<B$时我们先将左向左移动更优。
当$A>B$时我们先将右向右移动更优。
得到$30$分
#include <iostream>
#include <cstring>
#include <climits>
#include <cstdio>
// #include "debug.h"
#define N 111111 using namespace std; int len;
int arr[N],ans=0; void dfs(int l,int r){
if(l==r) return ;
int minn=INT_MAX,id;
for(int i=l;i<=r;i++){
if( minn > arr[i]){
minn = arr[i];
id = i;
}
else if( minn == arr[i] && min(r-id,id-l) > min(r-i,i-l)){
id = i;
}
}
if(r-id > id-l){
ans+=id-l;
for(int i=id;i>=l+1;i--)
arr[i]=arr[i-1];
arr[l]=minn;
dfs(l+1,r);
}
else{
ans+=r-id;
for(int i=id;i<=r-1;i++)
arr[i]=arr[i+1];
arr[r]=minn;
dfs(l,r-1);
}
}
int main(){
#ifndef LOCAL
freopen("time.in" ,"r",stdin);
freopen("time.out","w",stdout);
#endif
ios_base::sync_with_stdio(false);
cin>>len;
for(int i=1;i<=len;i++)
cin>>arr[i];
dfs(1,len);
cout<<ans<<endl;
}
$100\%$算法
我们已经在上面解决了许多的前趋问题,于是我们发现每次移动的答案贡献只有它向前/后比它大的块数,比它小的和等于它的全都会提前换到指定位置导致它没办法和它换(人家先占好坑了)。
那么用个全职权值树状数组。
#include <iostream>
#include <cstring>
#include <cstdio>
#define N 111111 using namespace std; int len;
int arr[N];
int pre[N],aft[N];
int ans;
namespace szsz{
int arr[N];
const int size=100010;
inline int lowbit(int x){
return x&(-x);
}
void add(int pos,int v){
while(pos<=size){
arr[pos]+=v;
pos+=lowbit(pos);
}
}
int query(int pos){
int res=0;
while(pos){
res+=arr[pos];
pos-=lowbit(pos);
}
return res;
}
void clear(){
memset(arr,0,sizeof arr);
}
}
int main(){
#ifndef LOCAL
freopen("time.in" ,"r",stdin);
freopen("time.out","w",stdout);
#endif
ios_base::sync_with_stdio(false);
cin>>len;
for(int i=1;i<=len;i++)
cin>>arr[i];
for(int i=1;i<=len;i++){
pre[i]=szsz::query(100000) - szsz::query(arr[i]);
szsz::add(arr[i],1);
}
szsz::clear();
for(int i=len;i>=1;i--){
aft[i]=szsz::query(100000) - szsz::query(arr[i]);
szsz::add(arr[i],1);
}
for(int i=1; i<=len; i++)
ans+=min(pre[i],aft[i]);
cout<<ans<<endl;
}
19-11-06-&的更多相关文章
- Update 19.11 for Azure Sphere
今天,微软发布了面向Azure Sphere的19.11更新,其主要亮点就是加入了对开发工具Visual Studio Code和Linux开发环境的支持.具体来讲,本次更新包含3个部分: 1. Az ...
- 11.06水题Test
11.06水题比赛 题目 描述 做法 \(BSOJ5150\) 求\(n\)个数两两之差的中位数 二分中位数,双指针判定\(\le x\)差值对数 \(BSOJ5151\) 求树的最大匹配和其个数 来 ...
- 软件工程项目组Z.XML会议记录 2013/11/06
软件工程项目组Z.XML会议记录 [例会时间]2013年11月06日星期二21:00-22:00 [例会形式]小组讨论 [例会地点]三号公寓楼会客厅 [例会主持]李孟 [会议记录]薛亚杰 会议整体流程 ...
- HDU6029 Happy Necklace 2017-05-07 19:11 45人阅读 评论(0) 收藏
Happy Necklace Time Limit: ...
- 开机时自动启动的AutoHotkey脚本 2019年07月08日19时06分
;;; 开机时自动启动的AutoHotkey脚本;; 此脚本修改时间 2019年06月18日20时48分;; 计时器创建代码段 ------------------------------------ ...
- 2014/11/06 Oracle触发器初步 2014-11-06 09:03 49人阅读 评论(0) 收藏
触发器我就不多解释了,保证数据的完整性的神器,嗯..也是减少程序员工作托管给数据库操作的好帮手.就不讲一些大道理了.通俗点,我们对数据库的操作,无非就是增 删 改 查. 触发器就是在删,改,增的时候( ...
- hdu 1053 (huffman coding, greedy algorithm, std::partition, std::priority_queue ) 分类: hdoj 2015-06-18 19:11 22人阅读 评论(0) 收藏
huffman coding, greedy algorithm. std::priority_queue, std::partition, when i use the three commente ...
- Let the Balloon Rise 分类: HDU 2015-06-19 19:11 7人阅读 评论(0) 收藏
Let the Balloon Rise Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth ...
- 2015/11/06 社保查询系统持续 挂机ing
- 善用VS中的Code Snippet来提高开发效率 分类: C# 2015-01-22 11:06 69人阅读 评论(0) 收藏
前言 在谈谈VS中的模板中,我介绍了如何创建项目/项模板,这种方式可以在创建项目时省却不少重复性的工作,从而提高开发效率.在创建好了项目和文件后,就得开始具体的编码了,这时又有了新的重复性工作,就是 ...
随机推荐
- 史上最全Redis面试题及答案。
花了大量时间整理了这套Redis面试题 首发50题,绝无仅有,从入门到精通 从基础,高级知识点,再到集群,运维,方案- 弄明白了这些题可以说可以成为面霸了 面试官都得折服,Redis学得怎么样,都来检 ...
- **JLink Warning: Mis-aligned memory write: Address: 0x20000000, NumBytes: 2, Alignment: 2 (Halfword-aligned)
网上也有同学遇到这个问题,http://www.openedv.com/thread-113049-1-3.html 根据他的经验我也重新安装了Jlink驱动: 顺便注意Dialog DLL:TARM ...
- 各版本IE兼容问题,IE6,IE7,IE8,IE9,IE10,IE11
在网站开发和学习中,由于各种兼容性问题,让开发者挺烦恼的,我的学员也经常因为兼容问题来找我取经. 事实上,IE给出了解决方案,谷歌给出了解决方案,国内著名网站百度也将这个解决方案应用于IE的兼容性问题 ...
- js 实现多选
效果: html: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...
- Ubuntu18.04 安装搜狗拼音
参考文章:https://blog.csdn.net/fx_yzjy101/article/details/80243710 1. 安装fcitx sudo apt-get install fcitx ...
- python 取出aws中ip有,zabbix中没有的ip
#!/usr/bin/env python3# coding=utf-8import requestsimport jsonimport boto3 headers = {'Content-Type' ...
- <a>标签中的href=""
href="javascript:;",其中javascript:是伪协议,它可以让我们通过一个链接来调用javascript函数.而采用这个方式 javascript:;可以实现 ...
- redis安装配置使用
1.redis官方下载地址:https://redis.io/download 也可以github上下载,redis 64位下载地址:https://github.com/ServiceStack/r ...
- Sqlite多线程相关整理
Sqlite多线程相关整理 Sqlite With MultiThreads 什么是线程安全? 当多个线程访问某个方法时,不管你通过怎样的调用方式.或者说这些线程如何交替地执行,我们在主程序中不需要去 ...
- Arthas 3.1.2 版本发布 | 增加 logger/heapdump/vmoption 命令
最近偶尔有用户反馈某些 HTTP 接口出现超时问题,而 web 服务端的 Trace 监控没有出现 http 返回值为 503 等异常情况.出现这种情况一般是web容器出现问题,客户端连 Arthas ...