【反序表+树状数组】Codeforces Round #441(Div.2)D[Sorting the Coins]题解
2017-10-17 14:30
597 查看
题目概述
刚开始有一个全是 1 的序列,现在给出 m 操作,每个操作把一个位置改成 0 ,每次操作完成后求冒泡(从大到小)次数。解题报告
这道题明显是个伪反序表(不是排列),但是可以沿用反序表的性质:冒泡的次数 =Bmax ( B 是反序表)。由于只有 0 和 1 ,所以反序表的最大值位置 max 我们是可以确定的,那就是最后一个 0 的位置。
所以每次维护最后一个 0 的位置,然后用树状数组求这个 0 前面有多少 1 就行了。
示例程序
#include<cstdio> using namespace std; const int maxn=300000; int n,lst,p[maxn+5],c[maxn+5]; inline void Update(int x,int tem) {for (int i=x;i<=n;i+=i&-i) c[i]+=tem;} inline int Sum(int x) {int sum=0;for (int i=x;i;i-=i&-i) sum+=c[i];return sum;} int main() { scanf("%d",&n);lst=n;printf("1"); for (int i=1,x;i<n;i++) { scanf("%d",&x);Update(x,1);p[x]=1;while (p[lst]) lst--; printf(" %d",Sum(lst-1)+1); } return printf(" 1\n"),0; }
相关文章推荐
- Codeforces Round #441 (Div.2) - D - Sorting the Coins
- #440 Div.2 D.Sorting the Coins 硬币排序问题
- Codeforces Round #441 (Div.2) - D - Sorting the Coins xjb搞搞。
- Codeforces Round #441 (Div.2) - D - Sorting the Coins xjb搞搞。
- Codeforces Round #439 (Div. 2) E. The Untended Antiquity 二维树状数组 随机化
- POJ 2761 Feed the dogs(树状数组求区间第K大)
- HDU 1556 Color the the ball(树状数组)
- hoj 2430 Counting the algorithms(树状数组,贪心)
- HDOJ 1556 Color the ball(树状数组)
- HDOJ 1556 Color the ball(树状数组模板)
- Color the ball(树状数组)
- hdu 1556 Color the ball (树状数组||线段树成段更新)
- HDOJ 1556 Color the ball(树状数组 & 线段树)
- Codeforces Round #441 D. Sorting the Coins
- HDU 1556 Color the ball (树状数组区间更新)
- Find the nondecreasing subsequences--(树状数组)
- HDU 1556 Color the ball(树状数组)
- 【Hdu 1556】 Color the ball (树状数组)
- 【树状数组 区间修改,单点求值】1556 Color the ball
- HDU 1556 Color the ball 树状数组-区间更新-模板