CF992E Nastya and King-Shamans_线段树
Code:
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 200000 + 5;
int n,q;
struct Segment_Tree
{
# define lson (o << 1)
# define rson (o << 1) | 1
long long sumv[maxn << 2], maxv[maxn << 2];
inline void maintain(int o){
sumv[o] = sumv[lson] + sumv[rson];
maxv[o] = max(maxv[lson], maxv[rson]);
}
void update(int l,int r,int pos, long long val, int o) {
if(l > r || l > pos || r < pos) return ;
if(l == r) { maxv[o] = sumv[o] = val; return ; }
int mid = (l + r) >> 1;
update(l, mid, pos, val, lson);
update(mid + 1, r, pos, val, rson);
maintain(o);
}
inline long long query(int l,int r,int L,int R,int o)
{
if(l > r || l > R || r < L) return 0;
if(l >= L && r <= R) return sumv[o];
int mid = (l + r) >> 1;
return query(l, mid, L, R, lson) + query(mid + 1, r, L, R, rson);
}
inline int dfs(int l,int r,long long val, int o)
{
if(l == r) return l;
int mid = (l + r) >> 1;
if(maxv[lson] >= val) return dfs(l, mid, val, lson);
else return dfs(mid + 1, r, val, rson);
}
int get(int l,int r, int L, int R, long long val,int o)
{
if(l > r || l > R || r < L) return -1;
if(l >= L && r <= R)
{
if(maxv[o] < val) return -1;
return dfs(l, r, val, o);
}
int mid = (l + r) >> 1, h;
h = get(l, mid, L, R, val, lson); if(h != -1) return h;
h = get(mid + 1, r, L, R, val, rson); if(h != -1) return h;
return -1;
}
}T;
inline void solve()
{
int l = 1;
for(;;) {
long long sumv = T.query(1, n, 1, l - 1, 1);
int pos = T.get(1, n, l, n, sumv, 1);
if(pos == -1) { printf("-1\n"); return ; }
else{
if(sumv + T.query(1, n, l, pos - 1, 1) == T.query(1, n, pos, pos, 1)) { printf("%d\n", pos); return ;}
l = pos + 1;
if(l > n) { printf("-1\n"); return ;}
}
}
}
int main()
{ scanf("%d%d",&n,&q);
for(int i = 1;i <= n; ++i) { long long a; scanf("%I64d",&a); T.update(1, n, i, a, 1); }
while(q--){
int pos;
long long h;
scanf("%d%I64d",&pos, &h);
T.update(1, n, pos, h, 1);
solve();
}
return 0;
}
CF992E Nastya and King-Shamans_线段树的更多相关文章
- CF992E Nastya and King-Shamans(线段树二分+思维)
这是一道卡常好题 从160s卡到36s qwq 由于题目设计到原数组的单点修改,那么就对应着前缀和数组上的区间加. 很显然能想到用线段树来维护这么个东西. 那么该如果求题目要求的位置呢 我们来看这个题 ...
- Codeforces Round #489 (Div. 2) E. Nastya and King-Shamans(线段树)
题意 给出一个长度为 \(n\) 的序列 \(\{a_i\}\) , 现在会进行 \(m\) 次操作 , 每次操作会修改某个 \(a_i\) 的值 , 在每次操作完后你需要判断是否存在一个位置 \(i ...
- HPU组队赛J:Ball King(线段树)
时间限制 1 Second 内存限制 512 Mb 题目描述 HPU601球王争霸赛即将举行,ACMER纷纷参加. 现在有n个人报名参赛,每个人都有一个实力值 ai,实力值较大者获胜. 为保证比赛公 ...
- Codeforces 1089K - King Kog's Reception - [线段树][2018-2019 ICPC, NEERC, Northern Eurasia Finals Problem K]
题目链接:https://codeforces.com/contest/1089/problem/K time limit per test: 2 seconds memory limit per t ...
- hdu5643 King's Game(约瑟夫环+线段树)
Problem Description In order to remember history, King plans to play losephus problem in the parade ...
- codeforces#1136E. Nastya Hasn't Written a Legend(二分+线段树)
题目链接: http://codeforces.com/contest/1136/problem/E 题意: 初始有a数组和k数组 有两种操作,一,求l到r的区间和,二,$a_i\pm x$ 并且会有 ...
- cf1136E. Nastya Hasn't Written a Legend(二分 线段树)
题意 题目链接 Sol yy出了一个暴躁线段树的做法. 因为题目保证了 \(a_i + k_i <= a_{i+1}\) 那么我们每次修改时只需要考虑取max就行了. 显然从一个位置开始能影响到 ...
- Codeforces 1136E Nastya Hasn't Written a Legend 线段树
vp的时候没码出来.. 我们用set去维护, 每一块区域, 每块区域内的元素与下一个元素的差值刚好为ki,每次加值的时候我们暴力合并, 可以发现我们最多合并O(n)次. 然后写个线段树就没了. #in ...
- Codeforces 1136E - Nastya Hasn't Written a Legend - [线段树+二分]
题目链接:https://codeforces.com/problemset/problem/1136/E 题意: 给出一个 $a[1 \sim n]$,以及一个 $k[1 \sim (n-1)]$, ...
- Nastya and King-Shamans CodeForces - 992E (线段树二分)
大意: 给定序列a, 单点更新, 询问是否存在a[i]等于s[i-1], s为a的前缀和, a非负 考虑到前缀和的单调性, 枚举从1开始前缀和, 找到第一个大于等于s[1]的a[i], 如果相等直接输 ...
随机推荐
- JS 作业
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 【leecode】小练习(简单8题)
def twoSum(nums, target): """ 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[ ...
- git 教程2 (git常用命令解说)
<1>$ git -- help (调出git的帮助文档) <2>$ git +命令 --help (查看某个具体命令的帮助文档) <3>$ git --versi ...
- Project Euler 34 Digit factorials
题意:判断一个数 N 的各个位数阶乘之和是否为其本身,找出所有符合要求的数然后求和 思路:此题思路跟 30 题相同,找到枚举上界 10 ^ n <= 9! × n ,符合要求的 n < 6 ...
- Windows下PHP服务nginx不能使用file_get_contents的原因
注意:本文为转载,原文链接:Windows下PHP服务nginx不能使用file_get_contents/curl/fopen的原因! 一.问题说明 在Windows环境下搭建了一个本地开发服务环境 ...
- python第三周:集合、函数、编码、文件
1.集合: 集合的创建: list_1 = set([1,2,3,4,5]) list_2 = set([2,3,44,7,8]) 集合的特性:集合是无序的,集合可以去掉重复的元素 集合的操作:求交集 ...
- PHP学习总结(7)——PHP入门篇之PHP注释
注释 在PHP中也有注释语句:用双斜杠(//)来表示.其它语言中,Html中使用<!--注释语句-->,CSS中使用/*注释语句*/.如下面代码: <?php//输出hi,imooc ...
- Jenkins学习总结(6)——了解DevOps的前世今生
DevOps是什么?从哪里来? DevOps的概念 DevOps一词的来自于Development和Operations的组合,突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建. ...
- SSH整合总结(OA项目)
代码规范 环境搭建 Struts2 jar包 struts.xml, web.xml Hibernatejar包:核心包, 必须包, jpa, c3p0, jdbchibernate.cfg.xml, ...
- spark transform系列__sortByKey
该函数主要功能:通过指定的排序规则与进行排序操作的分区个数,对当前的RDD中的数据集按KEY进行排序,并生成一个SHUFFLEdrdd的实例,这个过程会运行shuffle操作,在运行排序操作前,sor ...