//树状数组中数组的特性,有更巧妙的方法。
//我们知道在树状数组中,对于数组tree[i],它所维护的区间为[i−lowbit(i)+1,i]
//所以对于tree[2^i],它所维护的区间就为[1,2^i]。
//所以就可以利用此特性加上树状数组的操作,维护一个类似倍增方法,并且支持在线修改操作。
#define HAVE_STRUCT_TIMESPEC
#include<bits/stdc++.h>
using namespace std;
long long a[200007],tree[200007],ans[200007];
long long lowbit(long long x){//找到最低位的1
return x&(-x);
}
void update(long long x,long long val){//更新前缀和
for(long long i=x;i<=200007;i+=lowbit(i))
tree[i]+=val;
}
/*
long long query(int x){//树状数组求前缀和
long long ans=0;
for(long long i=x;i;i-=lowbit(x))
ans+=tree[i];
return ans;
}
*/
long long solve(long long k,long long n){//找到前缀和(sum1~x)为k的x
long long num=0,sum=0;
for(long long i=21;i>=0;--i){
if(num+(1<<i)<=n&&sum+tree[num+(1<<i)]<=k){
num+=1<<i;
sum+=tree[num];
}
}
return num+1;//返回x+1
}
int main(){
long long n;
cin>>n;
for(long long i=1;i<=n;++i){
update(i,i);//预处理前缀和
cin>>a[i];
}
for(long long i=n;i;--i){//从后向前扫
ans[i]=solve(a[i],n);//找到1+2+3+...+x==a[i],ans[i]=x+1
update(ans[i],-ans[i]);//将比ans[i]大的数的前缀和中都减去ans[i],因为ans[i]这个数字已经在它们的后面了
}
for(long long i=1;i<=n;++i)
cout<<ans[i]<<" ";
return 0;
}

Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2)D(树状数组)的更多相关文章

  1. Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2)-D. Restore Permutation-构造+树状数组

    Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2)-D. Restore Permutation-构造+树状数组 [Pro ...

  2. Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2)-C. Magic Grid-构造

    Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2)-C. Magic Grid-构造 [Problem Descripti ...

  3. Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2)-E. Let Them Slide-思维+数据结构

    Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2)-E. Let Them Slide-思维+数据结构 [Problem ...

  4. Codeforces Round #381 (Div. 2) D dfs序+树状数组

    D. Alyona and a tree time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  5. Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2) F. Bits And Pieces sosdp

    F. Bits And Pieces 题面 You are given an array

  6. Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2) G. Polygons 数论

    G. Polygons Description You are given two integers

  7. Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2) (1208F,1208G,1208H)

    1208 F 大意:  给定序列$a$, 求$\text{$a_i$|$a_j$&$a_k$}(i<j<k)$的最大值 枚举$i$, 从高位到低位贪心, 那么问题就转化为给定$x$ ...

  8. RMQ+差分处理(Let Them Slide)Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2)

    题意:https://codeforc.es/contest/1208/problem/E 现有n行w列的墙,每行有一排连续方块,一排方块可以左右连续滑动,且每个方块都有一个价值,第i 列的价值定义为 ...

  9. 线段树维护最后一个0的位置(Restore Permutation)Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2)

    题意:https://codeforc.es/contest/1208/problem/D 给你长度为n的序列,s[i]的值为p[1]到p[i-1]中比p[i]小的数的和,让你求出p序列. 思路: 首 ...

  10. Codeforces Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2)

    传送门 A. XORinacci 手玩三四项发现序列就是 $a,b,a\ xor\ b,a,b,...$,直接输出即可 #include<iostream> #include<cst ...

随机推荐

  1. 读写json文件

    def read_json(path): """return dict""" with open(path,'r+')as f: retur ...

  2. 离线安装paramiko以及pysftp linux,windows

    离线安装 paramiko python37 pip download -d ./dependency -r requirements.txt pip install --no-index --ign ...

  3. 前端开发:mock.js的简单应用(生成随机数据,拦截 Ajax 请求)

    摘要 在前端开发过程中,后端接口还没有完全开发完成时,前端开发人员就需要学会自己模拟后端接口数据,更快更好的完成开发任务.模拟后端接口数据的js库有很多,今天就简单就简单的分享下mock.js在前端开 ...

  4. pyqt5 通过QLinearGradient 绘制取色板

    要绘制HSV取色板,一般通过绘制前景色和背景色的方式实现,先绘制前景,然后绘制背景,前景是HSV颜色空间,从左到右,背景是亮度,从上到下,xs和ys是鼠标的当前的位置. def graphicsVie ...

  5. 读书小记--<态度>

    前言 前段时间再读了吴军老师的<态度>,分享的是和女儿的日常书信.觉得收获很多,同时推荐他的<浪潮之巅><数学之美><大学之路>系列书籍. 下面是个人的 ...

  6. 【译】高级T-SQL进阶系列 (三)【上篇】:理解公共表表达式(CTEs)

    [译注:此文为翻译,由于本人水平所限,疏漏在所难免,欢迎探讨指正] 原文链接:传送门. 伴随着SQL SERVER 2005的首次展示,微软介绍了一种新的被称为“公共表 表达式”(CTE)的查询结构. ...

  7. java泛型demo

    1.泛型类 public class Dog<T> { private T age; public Dog(T age) { this.age = age; } public T getA ...

  8. maven 配置环境变量后报错jdk版本不符

    不需要再cmd 输入java -version,因为环境变量里配置的不一定是cmd显示版本,直接看环境变量改成maven要求的jdk版本即可.

  9. RemoteView设置高度

    刚开始内层LinearLayout直接用 android:layout_height="match_parent" <?xml version="1.0" ...

  10. 转载--php 7.2 安装 mcrypt 扩展

    在 php 官网下载 mcrypt 包,php 扩展官网 # wget http://pecl.php.net/get/mcrypt-1.0.1.tgz # tar xf mcrypt-1.0.1.t ...