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 ...
随机推荐
- MySQL 语句中执行优先级——and比or高
转: MySQL 语句中执行优先级——and比or高 2017年04月20日 13:33:03 十步行 阅读数:7381 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...
- makefile使用笔记(二)变量
By francis_hao Oct 30,2017 makefile中可以使用变量,变量有多种类型,下面分别介绍 简单变量 简单变量的命名规则和c语言一致. 给变量赋值就表示创建了这个变量 ...
- Codeforces Round #338 (Div. 2) D 数学
D. Multipliers time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...
- Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1)A B C 水 并查集 思路
A. Bear and Big Brother time limit per test 1 second memory limit per test 256 megabytes input stand ...
- 阿里云 centos7 tomcat 启动巨慢的解决方法(几分钟)
方法一: 通过修改Tomcat启动文件-Djava.security.egd=file:/dev/urandom 通过修改JRE中的java.security文件securerandom.source ...
- python学习(九) 网络编程学习--简易网站服务器
python `网络编程`和其他语言都是一样的,服务器这块步骤为:`1. 创建套接字``2. 绑定地址``3. 监听该描述符的所有请求``4. 有新的请求到了调用accept处理请求` Python ...
- 8.Android_UiAutomator 报告查看
一.Android UiAutomator报告查看 1.错误类型 1)断言错误:就是断言这个用例的成功或者失败(AssrtionFailedError) 2)脚本错误:UiObjectNotFound ...
- IOS性能调优系列:使用Time Profiler发现性能瓶颈
硬广:<IOS性能调优系列>第五篇,预计会有二十多篇,持续更新,欢迎关注. 之前四篇都是关注于内存方面,分析了内存泄漏.僵尸对象.内存分配,本篇介绍Time Profiler工具的使用,开 ...
- Java BLOB 数据的插入与读取 操作
package com.lw.database; import java.io.FileInputStream; import java.io.FileOutputStream; import jav ...
- bluebird -1 New Promise方法
new Promise new Promise(function(function resolve, function reject) resolver) -> Promise 创建一个Prom ...