AC日记——Cards Sorting codeforces 830B
思路:
线段树;
代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define maxn 100005
#define INF 0x3f3f3f3f
#define maxtree maxn<<2
int n,ai[maxn],val[maxtree],L[maxtree],R[maxtree],Min[maxtree];
int P[maxtree],mid[maxtree];
inline void in(int &now)
{
char Cget=getchar();now=;
while(Cget>''||Cget<'') Cget=getchar();
while(Cget>=''&&Cget<='')
{
now=now*+Cget-'';
Cget=getchar();
}
}
void updata(int now)
{
val[now]=val[now<<]+val[now<<|];
Min[now]=min(Min[now<<],Min[now<<|]);
if(Min[now]==Min[now<<|]) P[now]=P[now<<|];
else P[now]=P[now<<];
}
void build(int now,int l,int r)
{
L[now]=l,R[now]=r;
if(l==r)
{
Min[now]=ai[l],P[now]=l,val[now]=;
return;
}
mid[now]=l+r>>;
build(now<<,l,mid[now]);
build(now<<|,mid[now]+,r);
updata(now);
}
void change(int now,int to)
{
if(L[now]==R[now])
{
val[now]=,Min[now]=INF,P[now]=;
return;
}
if(to<=mid[now]) change(now<<,to);
else change(now<<|,to);
updata(now);
}
int query(int now,int l,int r)
{
if(L[now]>=l&&R[now]<=r) return val[now];
int res=;
if(l<=mid[now]) res+=query(now<<,l,r);
if(r>mid[now]) res+=query(now<<|,l,r);
return res;
}
int get(int now,int l,int r)
{
if(L[now]>=l&&R[now]<=r) return P[now];
int tmp1=,tmp2=;
if(l<=mid[now]) tmp1=get(now<<,l,r);
if(r>mid[now]) tmp2=get(now<<|,l,r);
if(tmp2&&tmp1)
{
if(ai[tmp1]<ai[tmp2]) return tmp1;
else return tmp2;
}
if(tmp2) return tmp2;
if(tmp1) return tmp1;
return ;
}
int main()
{
in(n);
for(int i=;i<=n;i++) in(ai[i]);
int l=,r=n;while(l<r) swap(ai[l],ai[r]),l++,r--;
build(,,n);
int now=n,tmp1,tmp2,tmp;
long long ans=;
for(int i=;i<=n;i++)
{
tmp1=,tmp2=,tmp1=get(,,now);
if(now<n) tmp2=get(,now+,n);
if(tmp1&&tmp2)
{
if(ai[tmp2]<ai[tmp1]) tmp=tmp2;
else tmp=tmp1;
}
else if(tmp1) tmp=tmp1;
else tmp=tmp2;
if(tmp<=now) ans+=query(,tmp,now);
else ans+=query(,,now)+query(,tmp,n);
change(,tmp),now=tmp;
}
cout<<ans;
return ;
}
AC日记——Cards Sorting codeforces 830B的更多相关文章
- AC日记——Card Game codeforces 808f
F - Card Game 思路: 题意: 有n张卡片,每张卡片三个值,pi,ci,li: 要求选出几张卡片使得pi之和大于等于给定值: 同时,任意两两ci之和不得为素数: 求选出的li的最小值,如果 ...
- AC日记——Success Rate codeforces 807c
Success Rate 思路: 水题: 代码: #include <cstdio> #include <cstring> #include <iostream> ...
- AC日记——T-Shirt Hunt codeforces 807b
T-Shirt Hunt 思路: 水题: 代码: #include <cstdio> #include <cstring> #include <iostream> ...
- AC日记——Magazine Ad codeforces 803d
803D - Magazine Ad 思路: 二分答案+贪心: 代码: #include <cstdio> #include <cstring> #include <io ...
- AC日记——Broken BST codeforces 797d
D - Broken BST 思路: 二叉搜索树: 它时间很优是因为每次都能把区间缩减为原来的一半: 所以,我们每次都缩减权值区间. 然后判断dis[now]是否在区间中: 代码: #include ...
- AC日记——Array Queries codeforces 797e
797E - Array Queries 思路: 分段处理: 当k小于根号n时记忆化搜索: 否则暴力: 来,上代码: #include <cmath> #include <cstdi ...
- AC日记——Maximal GCD codeforces 803c
803C - Maximal GCD 思路: 最大的公约数是n的因数: 然后看范围k<=10^10; 单是答案都会超时: 但是,仔细读题会发现,n必须不小于k*(k+1)/2: 所以,当k不小于 ...
- AC日记——Vicious Keyboard codeforces 801a
801A - Vicious Keyboard 思路: 水题: 来,上代码: #include <cstdio> #include <cstring> #include < ...
- AC日记——Valued Keys codeforces 801B
801B - Valued Keys 思路: 水题... 来,上代码: #include <cstdio> #include <cstring> #include <io ...
随机推荐
- jsp 的 4 种基本语法
1.JSP 注释 2.JSP 声明 3.JSP 表达式 4.JSP 脚本 JSP 注释: 注释格式: <%-- 注释内容 --%> 需要注意的是,JSP 的注释不会输出到 HTML 中. ...
- linux 版本查询
原文 : http://www.ha97.com/2987.html 一.查看Linux内核版本命令(两种方法): 1.cat /proc/version [root@localhost ~]# ca ...
- Linux下UDP一发一收通信
实现在Linux环境下的UDP通信测试. 注释了while循环,将代码规范化. udpserver.c代码: /******************************************** ...
- 前端PHP入门-005-爱情是常量还是变量
常量 常--汉语字面为:长久,经久不变. 常量那就好翻译了:长久不变的值. 常量的使用范围非常广泛. 我们在以后,定义我们的工作目录.定义一些特点的帐户密码.版本号等我们都会使用到常量.所以这一块的知 ...
- Mongodb 备份 还原 导出 导入 等批量操作
mongodb数据备份和还原主要分为二种,一种是针对于库的mongodump和mongorestore,一种是针对库中表的mongoexport和mongoimport. 一,mongodump备份数 ...
- Linux中系统日志
系统日志的默认路径是:/var/log 下面是几个重要的日志文件的路径及其包含的信息: /var/log/syslog:它和/etc/log/messages日志文件不同,它只记录警告信息,常常是系统 ...
- 拖放API中的drag和drop实战
原文地址:→传送门 写在前面 在HTML5之前,实现拖放功能需要借助mousedown/mousemove/mouseover/mouseout/mouseup等鼠标事件来完成,HTML5中拖放API ...
- Freemarker代码生成器原理说明
一.Freemarker基本原理: FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具. 它不是面向最终用 ...
- scrapy爬虫框架介绍
一 介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速.简单.可扩展的方式从网站中提取所需的数据.但目前Scrapy的用途十分广泛,可 ...
- 【C++自我精讲】基础系列六 PIMPL模式
[C++自我精讲]基础系列六 PIMPL模式 0 前言 很实用的一种基础模式. 1 PIMPL解释 PIMPL(Private Implementation 或 Pointer to Implemen ...