F. Gabriel's Pocket Money 2017- BUPT Collegiate Programming Contest - sync

时间限制 2000 ms 内存限制 65536 KB

题目描述


For centuries, Heaven has required its young angels to live and study among humans in order to become full-fledged angels. This is no different for top-of-her-class Gabriel White Tenma, who believes it is her mission to be a great angel who will bring happiness to mankind.
However, Gabriel grows addicted to video games on Earth and eventually becomes a hikikomori. What's worse, her grades in school becomes erratic, which directly determines how much pocket money she could get from Heaven. Every week Gabriel needs to report her recent grade in school, and Heaven will give her some money based on her reports. In each report Gabriel is asked to offer two grades, the grade she get this week and a grade she has ever got before this week to show she is improved or at least not going backwards, like "I once got 59 points, and I get 61 points this week. So I'm improved!" or "I once got 59 points, and this week I get 59 points again. So I'm not going backwards!". Then Heaven will give her as much pocket money as her former grade points she reported (In both cases, she can get 59 dollars. What a hardworking angel!). If she can't offer such report, no pocket money would be offered this week. For example, the first week (she has only one grade).
Gabriel knows how to maximize the pocket money she get from heaven. Giving you Gabriel's transcript of this semester in order, can you figure out how much pocket money she can get in total?

输入格式

Input contains multiple test cases.
For each test case:

  • The first line contains an integers n(1≤n≤106), indicating the number of weeks;
  • The second line contains n integers a1,a2,...,an(0≤ai≤106).

输出格式

For each test case, output a number in a single line, indicating the total pocket money Gabriel can get. You should let answer modulo 19260817 before printing it.

输入样例

3
1 2 3
5
3 5 1 2 4

输出样例

3
7
【题意】给你一个数组,然后对于每个数,找到左边小于等于它的最大的那个数,然后依次累加起来。
【分析】数据小的话,可以O(N*N)来做,可是 N<1e6,那就只能树状数组了,对于每一个数,向上lowbit更新Lazy标记,Lazy标记的是
到目前为止这个数左边小于等于它的最大的数,那么查询的时候只需要向下lowbit查询取最大值就行了,复杂度NlogN。
#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define met(a,b) memset(a,b,sizeof a)
#define inf 10000000
using namespace std;
typedef long long ll;
typedef pair<int,int>pii;
const int N = 1e6+;
const double eps = 1e-;
int n,sum[N],m,cnt,k;
int lazy[N],a[N];
void update(int x,int num){
for(int i=x;i<N;i+=i&(-i)){
lazy[i]=max(lazy[i],num);
}
}
int query(int x){
int ret=;
for(int i=x;i>=;i-=i&(-i)){
ret=max(ret,lazy[i]);
}
return ret==?ret:ret-;
}
int main() {
int T,x,y,xx,yy;
while(~scanf("%d",&n)){
met(lazy,);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
a[i]++;
}
ll ans=;
for(int i=;i<=n;i++){
int s=query(a[i]);
ans=(ans+s)%;
update(a[i],a[i]);
}
printf("%lld\n",ans);
}
return ;
}

北邮校赛 F. Gabriel's Pocket Money(树状数组)的更多相关文章

  1. AtCoder Beginner Contest 253 F - Operations on a Matrix // 树状数组

    题目传送门:F - Operations on a Matrix (atcoder.jp) 题意: 给一个N*M大小的零矩阵,以及Q次操作.操作1(l,r,x):对于 [l,r] 区间内的每列都加上x ...

  2. Codeforces 1167 F Scalar Queries 计算贡献+树状数组

    题意 给一个数列\(a\),定义\(f(l,r)\)为\(b_1, b_2, \dots, b_{r - l + 1}\),\(b_i = a_{l - 1 + i}\),将\(b\)排序,\(f(l ...

  3. 北邮校赛 I. Beautiful Array(DP)

    I. Beautiful Array 2017- BUPT Collegiate Programming Contest - sync 时间限制 1000 ms 内存限制 65536 KB 题目描述 ...

  4. 北邮校赛 H. Black-white Tree (猜的)

    H. Black-white Tree 2017- BUPT Collegiate Programming Contest - sync 时间限制 1000 ms 内存限制 65536 KB 题目描述 ...

  5. 2015 北京网络赛 E Border Length hihoCoder 1231 树状数组 (2015-11-05 09:30)

    #1231 : Border Length 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Garlic-Counting Chicken is a special spe ...

  6. 【洛谷】NOIP提高组模拟赛Day2【动态开节点/树状数组】【双头链表模拟】

    U41571 Agent2 题目背景 炎炎夏日还没有过去,Agent们没有一个想出去外面搞事情的.每当ENLIGHTENED总部组织活动时,人人都说有空,结果到了活动日,却一个接着一个咕咕咕了.只有不 ...

  7. 「模拟赛20180307」三元组 exclaim 枚举+树状数组

    题目描述 给定 \(n,k\) ,求有多少个三元组 \((a,b,c)\) 满足 \(1≤a≤b≤c≤n\)且\(a + b^2 ≡ c^3\ (mod\ k)\). 输入 多组数据,第一行数据组数\ ...

  8. Distance(2019年牛客多校第八场D题+CDQ+树状数组)

    题目链接 传送门 思路 这个题在\(BZOJ\)上有个二维平面的版本(\(BZOJ2716\)天使玩偶),不过是权限题因此就不附带链接了,我也只是在算法进阶指南上看到过,那个题的写法是\(CDQ\), ...

  9. 【CSP模拟赛】奇怪的队列(树状数组 &二分&贪心)

    题目描述 nodgd的粉丝太多了,每天都会有很多人排队要签名.  今天有n个人排队,每个人的身高都是一个整数,且互不相同.很不巧,nodgd今天去忙别的事情去了,就只好让这些粉丝们明天再来.同时nod ...

随机推荐

  1. 「模板」 树链剖分 HLD

    「模板」 树链剖分 HLD 不懂OOP的OIer乱用OOP出人命了. 谨此纪念人生第一次类套类. 以及第一次OI相关代码打过200行. #include <algorithm> #incl ...

  2. CentOS7安装Memcached 三步曲

    1.yum 安装 yum clean allyum -y updateyum -y install memcached 2.Memcached 运行 memcached -h //查看考号修改配置vi ...

  3. 【洛谷 T47488】 D:希望 (点分治)

    题目链接 看到这种找树链的题目肯定是想到点分治的. 我码了一下午,\(debug\)一晚上,终于做到只有两个点TLE了. 我的是不完美做法 加上特判\(A\)了这题qwq 记录每个字母在母串中出现的所 ...

  4. Reachability from the Capital(Codeforces Round #490 (Div. 3)+tarjan有向图缩点)

    题目链接:http://codeforces.com/contest/999/problem/E 题目: 题意:给你n个城市,m条单向边,问你需要加多少条边才能使得从首都s出发能到达任意一个城市. 思 ...

  5. C#读取txt文件时中文乱码

    解决办法 使用GB2312中文字符集 StreamReader reader = new StreamReader(txtUrl, Encoding.GetEncoding("gb2312& ...

  6. DIV+CSS左右列高度自适应问题

    其实解决DIV+CSS左右两列高度自适应的方法就是要注意两点:一是在最外层加上overflow:hidden,然后在左边列加上margin-bottom:-9999px;padding-bottom: ...

  7. GNU Readline 库及编程简介【转】

    转自:https://www.cnblogs.com/hazir/p/instruction_to_readline.html 用过 Bash 命令行的一定知道,Bash 有几个特性: TAB 键可以 ...

  8. $scope作用及模块化解决全局问题

    $scope对象就是一个普通的JavaScript对象,我们可以在其上随意修改或添加属性.$scope对象在AngularJS中充当数据模型,但与传统的数据模型不一样,$scope并不负责处理和操作数 ...

  9. Deep Learning基础--26种神经网络激活函数可视化

    在神经网络中,激活函数决定来自给定输入集的节点的输出,其中非线性激活函数允许网络复制复杂的非线性行为.正如绝大多数神经网络借助某种形式的梯度下降进行优化,激活函数需要是可微分(或者至少是几乎完全可微分 ...

  10. [PAT] 1142 Maximal Clique(25 分)

    1142 Maximal Clique(25 分) A clique is a subset of vertices of an undirected graph such that every tw ...