Cards Sorting

思路:

  线段树;

代码:

#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的更多相关文章

  1. AC日记——Card Game codeforces 808f

    F - Card Game 思路: 题意: 有n张卡片,每张卡片三个值,pi,ci,li: 要求选出几张卡片使得pi之和大于等于给定值: 同时,任意两两ci之和不得为素数: 求选出的li的最小值,如果 ...

  2. AC日记——Success Rate codeforces 807c

    Success Rate 思路: 水题: 代码: #include <cstdio> #include <cstring> #include <iostream> ...

  3. AC日记——T-Shirt Hunt codeforces 807b

    T-Shirt Hunt 思路: 水题: 代码: #include <cstdio> #include <cstring> #include <iostream> ...

  4. AC日记——Magazine Ad codeforces 803d

    803D - Magazine Ad 思路: 二分答案+贪心: 代码: #include <cstdio> #include <cstring> #include <io ...

  5. AC日记——Broken BST codeforces 797d

    D - Broken BST 思路: 二叉搜索树: 它时间很优是因为每次都能把区间缩减为原来的一半: 所以,我们每次都缩减权值区间. 然后判断dis[now]是否在区间中: 代码: #include ...

  6. AC日记——Array Queries codeforces 797e

    797E - Array Queries 思路: 分段处理: 当k小于根号n时记忆化搜索: 否则暴力: 来,上代码: #include <cmath> #include <cstdi ...

  7. AC日记——Maximal GCD codeforces 803c

    803C - Maximal GCD 思路: 最大的公约数是n的因数: 然后看范围k<=10^10; 单是答案都会超时: 但是,仔细读题会发现,n必须不小于k*(k+1)/2: 所以,当k不小于 ...

  8. AC日记——Vicious Keyboard codeforces 801a

    801A - Vicious Keyboard 思路: 水题: 来,上代码: #include <cstdio> #include <cstring> #include < ...

  9. AC日记——Valued Keys codeforces 801B

    801B - Valued Keys 思路: 水题... 来,上代码: #include <cstdio> #include <cstring> #include <io ...

随机推荐

  1. oracle 时间

    select to_char(to_date(sysdate,'yyyy-mm-dd'),'day') from dual; select to_date('2017-12-31','day') fr ...

  2. css样式表设置

    有参考此片博文 1.内联式样式表 是指将CSS样式编码写在HTML标签中,在标签内编写的样式能影响的范围最小,只改变本标签的文字样式,同样的标签不会受到影响,也称行间样式表. 格式如下 <h1 ...

  3. Redundant data in update statements

    Q:   Hibernate generates UPDATE statements, which include all columns, regardless of whether I'm cha ...

  4. bzoj2962 序列操作

    2962: 序列操作 Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 1145  Solved: 378[Submit][Status][Discuss ...

  5. 洛谷P1012 拼数

    题目描述 设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数. 例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213 又如:n=4时,4个整数7,13,4 ...

  6. 使用gulp进行css、js压缩

    var gulp = require('gulp'); var cleanCSS = require('gulp-clean-css'); var concatCss = require('gulp- ...

  7. 全能型eclipse 下载

    百度网盘地址: 链接: https://pan.baidu.com/s/1RFUkdSZUfuubFATLVdVH3w 提取码:kncg 这个eclipse几乎包含了现在所有的开发语言

  8. mesos+marathon+zookeeper+docker

    http://mesosphere.com/docs/mesosphere/getting-started/single-node-install/ mesos-master --zk=zk://lo ...

  9. 设置texture

    //获取内部资源贴图 public void setInsideTexture() { Texture2D texture = Resources.Load(texture_url) as Textu ...

  10. Java设计模式の命令模式

    意图: 将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化:对请求排队或记录日志,以及支持可撤销的操作 动机: 将”发出请求的对象”和”接收与执行这些请求的对象”分隔开来. 效果: 1).c ...