CF 675E Trains and Statistic
草稿和一些题解而已
因为指针太恶心了
所以query决定还是要试试自己yy一下
#include<cstdio>
#include<cstring>
#include<iostream>
#define ll long long
using namespace std;
int maxx[4000101],poss[4000101],n;
struct node{
int a,posl;
};
void pushup(int rt){
if (maxx[rt<<1]>maxx[rt<<1|1])maxx[rt]=maxx[rt<<1],poss[rt]=poss[rt<<1];
else maxx[rt]=maxx[rt<<1|1],poss[rt]=poss[rt<<1|1];
}
void build(int l, int r, int rt) {
if (l == r){
maxx[rt]=0;
poss[rt]=l;return ;
}
int m = (l + r) >> 1;
build(l,m,rt<<1);
build(m+1,r,(rt<<1)|1);
pushup(rt);
}
void update(int p,int c, int l,int r,int rt) {
if (l == r){
maxx[rt]=c;return ;
}
int m=(l+r)>>1;
if(p<=m)update(p,c,l,m,rt<<1);
else update(p,c,m+1,r,(rt<<1)|1);
pushup(rt);
}
node query(int L, int R, int l, int r, int rt){
if (L <= l&&r<= R){
node x;
x.a=maxx[rt];x.posl=poss[rt];
return x;
}
int m =(l+r)>>1;
node ans;ans.a=0;
if(L<=m){
node kk=query(L,R,l, m,rt<<1);if(kk.a>ans.a)ans=kk;
}
if(R>m){
node kk=query(L,R,m+1,r,(rt<<1)|1);if(kk.a>ans.a)ans=kk;
}
return ans;
}
ll a[101000],dp[101000];
int main(){
scanf("%d",&n);
memset(dp,0,sizeof(dp));
ll ans=0;
build(1,n,1);
for(int i=1;i<=n-1;i++)scanf("%lld",&a[i]);
update(n,n,1,n,1);
for(int i=n-1; i>=1;i--){
node temp=query(i+1,a[i],1,n,1);
dp[i]=dp[temp.posl]+(n-i)-(a[i]-temp.posl);
ans+=dp[i];
update(i,a[i],1,n,1);
}
printf("%lld",ans);
return 0;
}
yy完毕,写了个傻逼结构体
CF 675E Trains and Statistic的更多相关文章
- Codeforces 675E Trains and Statistic - 线段树 - 动态规划
题目传送门 快速的vjudge通道 快速的Codeforces通道 题目大意 有$n$个火车站,第$i$个火车站出售第$i + 1$到第$a_{i}$个火车站的车票,特殊地,第$n$个火车站不出售车票 ...
- Codeforces 675E Trains and Statistic(DP + 贪心 + 线段树)
题目大概说有n(<=10W)个车站,每个车站i卖到车站i+1...a[i]的票,p[i][j]表示从车站i到车站j所需买的最少车票数,求所有的p[i][j](i<j)的和. 好难,不会写. ...
- codeforces 675E Trains and Statistic 线段树+贪心统计
分析:这个题刚看起来无从下手 但是我们可以先简化问题,首先可以固定起点i,求出i+1到n的最小距离 它可以到达的范围是[i+1,a[i]],贪心的想,我们希望换一次车可以到达的距离尽量远 即:找一个k ...
- CodeForces 675E Trains and Statistic
贪心,递推,线段树,$RMQ$. 假设我们记$ans[i]$是以$i$点为起点对答案的贡献,那么答案就是$\sum\limits_{i = 1}^n {ans[i]}$. $ans[i]$怎么计算呢? ...
- codeforces 675E E. Trains and Statistic(线段树+dp)
题目链接: E. Trains and Statistic time limit per test 2 seconds memory limit per test 256 megabytes inpu ...
- Codeforces Round #353 (Div. 2) E. Trains and Statistic dp 贪心
E. Trains and Statistic 题目连接: http://www.codeforces.com/contest/675/problem/E Description Vasya comm ...
- 【34.54%】【codeforces 675E】Trains and Statistic
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- Codeforces Round #353 (Div. 2) E. Trains and Statistic 线段树+dp
题目链接: http://www.codeforces.com/contest/675/problem/E 题意: 对于第i个站,它与i+1到a[i]的站有路相连,先在求所有站点i到站点j的最短距离之 ...
- 【CF675E】Trains and Statistic(贪心,DP,线段树优化)
题意:a[i]表示从第i个车站可以一张票到第[i+1,a[i]]这些车站;p[i][j]表示从第i个车站到第j个车站的最少的票数,现在要求∑dp[i][j](1<=i<=n,i<j& ...
随机推荐
- (转)em重建全过程
该问题遇到N次,被郁闷N次,特此记录以备不时之需 由于n久不用em,而本机在公司使用dhcp自动获取ip,导致ip变化,而使em启动报出ora-12514 DBD ERROR: OCIServerAt ...
- libextobjc 实现的 defer
算法沉思录:分而治之(复用): 分而治之是指把大而复杂的问题分解成若干个简单的小问题,然后逐个解决.这种朴素的思想来源于人们生活与工作的经验,也完全适合于技术领域. 要崩溃的节奏: 要崩溃的节奏: V ...
- Hadoop学习之路(十七)MapReduce框架Partitoner分区
Partitioner分区类的作用是什么? 在进行MapReduce计算时,有时候需要把最终的输出数据分到不同的文件中,比如按照省份划分的话,需要把同一省份的数据放到一个文件中:按照性别划分的话,需要 ...
- Python自动化之复习基础
用户在命令行输入的参数可以在sys.argv里面看到,并且是以列表的形式现实的
- 【转】Spring Boot干货系列:(六)静态资源和拦截器处理
前言 本章我们来介绍下SpringBoot对静态资源的支持以及很重要的一个类WebMvcConfigurerAdapter. 正文 前面章节我们也有简单介绍过SpringBoot中对静态资源的默认支持 ...
- 访问 IIS 元数据库失败解决问题的方法
近日调试一Asp.net程序,出现了“访问 IIS 元数据库失败”的错误信息,最后经过搜索发现了解决问题的方法. 解决方法如下: 1.依次点击“开始”-“运行”. 2.在“运行”栏内输入 “C:\WI ...
- STM32中用 stop 模式 配合低功耗模式下的自动唤醒(AWU) 能否实现FreeRTOS tickless 模式
已经实现 ,2018年11月17日11:56:42,具体 如下: 第一步 : 修改 void vPortSetupTimerInterrupt( void ) 函数 ,修改原来的 systick 定 ...
- OpenGL ES天空盒子效果
一.理解 利用GLKBaseEffect,自定义顶点着色器和片元着色器,结合天空盒子,展示效果 二.技术代码 CCSkyBoxEffect:天空盒子效果类: CCSkyboxShader.vsh:顶点 ...
- C语言中数组定义方式
<1>前言 大家首先来思考一个问题,若是我们想要定义两个变量,求这两个数的平均数,该怎么求呢? 例如:int a = 10,b = 20 int average = (a + b) / 2 ...
- 20155226 2016-2017-2 《Java程序设计》第9周学习总结
20155226 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 JDBC简介 JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商 ...