Codeforces 892B Wrath 【差分】
2017-11-19 14:08
411 查看
题目链接:http://codeforces.com/contest/892/problem/B
题外话:
前几天的noip考炸了,成绩出来的时候再补游记吧。
期中考考的还行,三大主科350轻松混到rk2
发现了许多问题,希望自己今后不再出现吧。
sro scb hyw orz
题意:
有一个数列 L[] ,对于任意一个人i,在同一时间,他可以干掉他前面的L[i]个人,问最后有多少个人活着。
题解:
最初想到用一个数组记录活的人,发现会炸,发现区间修改,果断上差分,差分会在 O(n)的时间复杂度内统计出有哪些人活着。
代码:
题外话:
前几天的noip考炸了,成绩出来的时候再补游记吧。
期中考考的还行,三大主科350轻松混到rk2
发现了许多问题,希望自己今后不再出现吧。
sro scb hyw orz
题意:
有一个数列 L[] ,对于任意一个人i,在同一时间,他可以干掉他前面的L[i]个人,问最后有多少个人活着。
题解:
最初想到用一个数组记录活的人,发现会炸,发现区间修改,果断上差分,差分会在 O(n)的时间复杂度内统计出有哪些人活着。
代码:
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <map> // STL #include <string> #include <vector> #include <queue> #include <stack& 4000 gt; #define mpr make_pair #define debug() puts("okkkkkkkk") using namespace std; typedef long long LL; const int inf = 1 << 26; int n; int L[1000005]; int cf[1000005],af[1000005]; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d",&L[i]); for(int i=n;i>=1;i--){ int now=L[i]; //[max(0,i-now),i-1] --cf[max(1,i-now)]; ++cf[i]; } int ans=0; af[1]=cf[1]; if(af[1]==0)++ans; for(int i=2;i<=n;i++){ af[i]=af[i-1]+cf[i]; if(af[i]==0)++ans; } printf("%d\n",ans); return 0; }
相关文章推荐
- CodeForces 892B Wrath
- codeforces-892B Wrath
- Codeforces 246C Little Girl And Maximum 差分
- Codeforces 853B Round #433 Div2D& Div1B Jury Meeting:差分前缀和+模拟
- Codeforces 739B(树上路径倍增及差分)
- Codeforces 8VC Venture Cup 2016 - Elimination Round F. Group Projects 差分DP*****
- Codeforces Round #439 (Div. 2) Problem E (Codeforces 869E) - 暴力 - 随机化 - 二维树状数组 - 差分
- codeforces 853B 思维 差分
- Codeforces 892B Wrath (递推)
- Codeforces 740D Alyona and a tree 二分+树上差分
- Codeforces 841D Leha and another game about graph - 差分
- Codeforces 19E 树上差分
- CodeForces 24D Broken Robot
- hdu 3592 差分约束 first bolld
- codeforces 120A Elevator
- codeforces 471C MUH and House of Cards 数论
- codeforces B - More Cowbell (贪心)
- CodeForces 293E Close Vertices
- [codeforces] C - Pythagorean Triples 数学
- CodeForces 19D Points (线段树+set)