北邮校赛 F. Gabriel's Pocket Money(树状数组)
F. Gabriel's Pocket Money 2017- BUPT Collegiate Programming Contest - sync
题目描述
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(树状数组)的更多相关文章
- 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 ...
- 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 ...
- 北邮校赛 I. Beautiful Array(DP)
I. Beautiful Array 2017- BUPT Collegiate Programming Contest - sync 时间限制 1000 ms 内存限制 65536 KB 题目描述 ...
- 北邮校赛 H. Black-white Tree (猜的)
H. Black-white Tree 2017- BUPT Collegiate Programming Contest - sync 时间限制 1000 ms 内存限制 65536 KB 题目描述 ...
- 2015 北京网络赛 E Border Length hihoCoder 1231 树状数组 (2015-11-05 09:30)
#1231 : Border Length 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Garlic-Counting Chicken is a special spe ...
- 【洛谷】NOIP提高组模拟赛Day2【动态开节点/树状数组】【双头链表模拟】
U41571 Agent2 题目背景 炎炎夏日还没有过去,Agent们没有一个想出去外面搞事情的.每当ENLIGHTENED总部组织活动时,人人都说有空,结果到了活动日,却一个接着一个咕咕咕了.只有不 ...
- 「模拟赛20180307」三元组 exclaim 枚举+树状数组
题目描述 给定 \(n,k\) ,求有多少个三元组 \((a,b,c)\) 满足 \(1≤a≤b≤c≤n\)且\(a + b^2 ≡ c^3\ (mod\ k)\). 输入 多组数据,第一行数据组数\ ...
- Distance(2019年牛客多校第八场D题+CDQ+树状数组)
题目链接 传送门 思路 这个题在\(BZOJ\)上有个二维平面的版本(\(BZOJ2716\)天使玩偶),不过是权限题因此就不附带链接了,我也只是在算法进阶指南上看到过,那个题的写法是\(CDQ\), ...
- 【CSP模拟赛】奇怪的队列(树状数组 &二分&贪心)
题目描述 nodgd的粉丝太多了,每天都会有很多人排队要签名. 今天有n个人排队,每个人的身高都是一个整数,且互不相同.很不巧,nodgd今天去忙别的事情去了,就只好让这些粉丝们明天再来.同时nod ...
随机推荐
- pyttsx3 winsound win32api.MessageBox使用案例
import requests,time from lxml import etree import win32api,win32con import winsound import pyttsx3 ...
- [BZOJ1087][SCOI2005]互不侵犯King解题报告|状压DP
在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 好像若干月前非常Naive地去写过DFS... ...
- JS语句循环(100以内奇偶数、100以内与7先关的数、100以内整数的和、10以内阶乘、乘法口诀、篮球弹起高度、64格子放东西)
3.循环 循环是操作某一个功能(执行某段代码). ①循环四要素: a 循环初始值 b 循环的条件 c 循环状态 d 循环体 ②for循环 a 穷举:把所有的可能性的都一一列出来. b 迭代:每次循环都 ...
- 基于 Docker 的 Zabbix 微服务系统
zabbix 官网提供一个镜像 [ zabbix-appliance ], 可以直接拉起一个 zabbix-server. 但是数据库无法分离出来. 本实践使用 zabbix 官方提供的 Docker ...
- HDU 1728 逃离迷宫 (广搜)
题目链接 Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可 ...
- windows10安装oracle11g报错ORA-01034、ORA-01078
ORA-01034表示数据库实例未建立,可以先用管理员账号进入一个空白实例 sqlplus / as sysdba; 如果您当前使用的账号是安装oracle的账号,则不需要账号密码就可以登陆oracl ...
- bzoj 3343 分块
因为询问比较少,所以我们可以将n个数分成sqrt(n)个块,每个块用一颗bst存一下,然后对于修改l,r,我们将l,r区间中整块的直接在bst上打一个标签,对于不是整块的我们直接暴力修改,对于询问l, ...
- gradle问题总结与理解(一篇文章带你理解android studio 与gradle 的关系)
前言:近日在网上找了个很不错的安卓二维码美化,由于下载的项目经常出问题,且不方便依赖使用,因此我想把它写个demo,并把源码发布到jcenter中,修改还是很顺利的,运行项目到手机也没问题,发布遇到了 ...
- 计数排序的实现--适用于元素均较小的seq
今天无聊就打算把所有的排序算法都看一遍... 计数排序的时间复杂度是O(n),在算法导论中,用决策树模型中论证了,比较排序的情况为nlogn的复杂度.而计数排序的时间复杂度小于他的原因就是它不需要进行 ...
- [路由] -- Yii2 url地址美化与重写
转载:http://blog.csdn.net/lmjy102/article/details/53857520