Codeforces Round #353 (Div. 2) E

原创 2016年05月30日 20:23:01


Trains and Statistic

题意:有n个车站,第i个车站可以买一张票到i+1和ai之间,p(i,j)表示从i到j需要买的最小票数,求p(i,j)之和


#include <iostream>
#include <string>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <vector>
#include <map>
#include <bitset>
#include <queue>
#pragma comment(linker, "/STACK:102400000,102400000")
using namespace std;

#define LL long long
#define ULL unsigned long long
#define eps 1e-9
#define N (200000 + 10)
#define M (50000 + 10)
#define pii pair<int,int>
#define MP make_pair
#define inf 0x3f3f3f3f
#define md (ll+rr>>1)
#define lson ll, md, ls
#define rson md + 1, rr, rs
#define ls i<<1
#define rs i<<1|1
#define mod 1000000007
#define Pi acos(-1.0)


int a[N];

LL ans;


LL dp[N];
LL mi[N<<2];
int n;

void update(int x, LL v, int ll, int rr, int i) {
	if(ll == rr) {
		mi[i] = v;
		return;
	}
	if(x <= md) update(x, v, lson);
	else update(x, v, rson);
	mi[i] = min(mi[ls], mi[rs]);
}

LL query(int l, int r, int ll, int rr, int i) {
	if(l == ll && r == rr) {
		return mi[i];
	}
	if(r <= md) return query(l, r, lson);
	else if(l > md) return query(l, r, rson);
	else return min(query(l, md, lson), query(md+1, r, rson));
}

void gao() {
	update(n, n, 1, n, 1);
	for(int i = n-1; i >= 1; --i) {
		LL k = query(i+1, a[i], 1, n, 1);
		dp[i] = k  - a[i] + n - i;
		update(i, dp[i]+i, 1, n, 1);
		ans += dp[i];
	}

}


int main() {
	scanf("%d", &n);
	int x;
	for(int i = 1; i < n; ++i) {
		scanf("%d", &x);
		a[i] = x;
	}
	ans = 0;
	gao();
	printf("%I64d\n", ans);
}

Codeforces Round #258 (Div. 2)-(A,B,C,D,E)

A:Game With Sticks 水题。。。每次操作,都会拿走一个横行,一个竖行。 所以一共会操作min(横行,竖行)次。 #include #include #include #include ...
  • rowanhaoa
  • rowanhaoa
  • 2014年07月25日 14:39
  • 1479

【解题报告】Codeforces Round #401 (Div. 2)

简略的解题报告。
  • TRiddle
  • TRiddle
  • 2017年02月25日 17:55
  • 413

Codeforces Round #395 (Div. 2)(ABCD)

ps:打完这场cf才知道自己真的很菜,还是停留在AB题的水平,有时候CD其实很简单,但就是想不到,别人一眼看出而我就是想不到,有时候想到了点子上但就是突破不了 题目链接:  Codeforc...
  • qq_34731703
  • qq_34731703
  • 2017年02月03日 12:50
  • 496

Codeforces Beta Round #35 (Div. 2) E. Parade(成段更新)

题意:给你n个建筑的楼顶的高度,以及楼顶的左坐标l,右坐标r(可以看成是线段),问整个建筑的轮廓的转折点。         易得,当两个建筑和交叉的部分时,那么显现出的轮廓的,一定是比较高的那个建筑...
  • shiqi_614
  • shiqi_614
  • 2013年03月29日 16:58
  • 1451

Codeforces Round #378 (Div. 2) E. Sleep in Class

链接:http://codeforces.com/contest/733/problem/E 题意:给一个只含'U'和'D'的字符串,U表示向右走,D表示向左走。每个格子踩一次之后翻转(U变D,D变...
  • Fsss_7
  • Fsss_7
  • 2016年11月15日 13:48
  • 359

Codeforces Round #460 (Div. 2) D. Substring(拓扑排序)

题目链接题意:有一个n个点m条边的有向图,每个节点有一个字母,路径的权值是路径上相同字母的最大个数。求最大的路径权值。思路:因为只有26个字母,所以直接假设其中一个字母为相同字母数最大的字母。枚举每一...
  • cyf199775
  • cyf199775
  • 2018年02月01日 13:55
  • 39

Codeforces Round #442 (Div. 2)

A. #include using namespace std; typedef long long ll; int main() { string s; cin >> s; ...
  • Egqawkq
  • Egqawkq
  • 2017年10月24日 02:15
  • 239

Codeforces Round #428 (Div. 2):D. Winter is here(组合数公式)

D. Winter is here time limit per test 3 seconds memory limit per test 256 megabytes input stan...
  • Jaihk662
  • Jaihk662
  • 2017年08月14日 14:52
  • 349

Codecraft-17 and Codeforces Round #391 (Div. 1 + Div. 2, combined)A+B

A. Gotta Catch Em’ All!time limit per test:1 secondmemory limit per test:256 megabytesinput:standard...
  • qq_33183401
  • qq_33183401
  • 2017年01月16日 17:12
  • 243

Codeforces Round #460 (Div. 2) D. Substring

题目链接:D. Substring 题目大意 一张有向图,每个结点上有一个字母,定义一条路径的权值为路径中出现次数最多的字母的出现次数,求图中权值最大的路径的权值,如果权值可以无限大,输出-1...
  • litmxs
  • litmxs
  • 2018年01月31日 23:25
  • 67
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Codeforces Round #353 (Div. 2) E
举报原因:
原因补充:

(最多只允许输入30个字)