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_线段树的更多相关文章

  1. CF992E Nastya and King-Shamans(线段树二分+思维)

    这是一道卡常好题 从160s卡到36s qwq 由于题目设计到原数组的单点修改,那么就对应着前缀和数组上的区间加. 很显然能想到用线段树来维护这么个东西. 那么该如果求题目要求的位置呢 我们来看这个题 ...

  2. Codeforces Round #489 (Div. 2) E. Nastya and King-Shamans(线段树)

    题意 给出一个长度为 \(n\) 的序列 \(\{a_i\}\) , 现在会进行 \(m\) 次操作 , 每次操作会修改某个 \(a_i\) 的值 , 在每次操作完后你需要判断是否存在一个位置 \(i ...

  3. HPU组队赛J:Ball King(线段树)

    时间限制 1 Second  内存限制 512 Mb 题目描述 HPU601球王争霸赛即将举行,ACMER纷纷参加. 现在有n个人报名参赛,每个人都有一个实力值 ai,实力值较大者获胜. 为保证比赛公 ...

  4. 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 ...

  5. hdu5643 King's Game(约瑟夫环+线段树)

    Problem Description In order to remember history, King plans to play losephus problem in the parade ...

  6. codeforces#1136E. Nastya Hasn't Written a Legend(二分+线段树)

    题目链接: http://codeforces.com/contest/1136/problem/E 题意: 初始有a数组和k数组 有两种操作,一,求l到r的区间和,二,$a_i\pm x$ 并且会有 ...

  7. cf1136E. Nastya Hasn't Written a Legend(二分 线段树)

    题意 题目链接 Sol yy出了一个暴躁线段树的做法. 因为题目保证了 \(a_i + k_i <= a_{i+1}\) 那么我们每次修改时只需要考虑取max就行了. 显然从一个位置开始能影响到 ...

  8. Codeforces 1136E Nastya Hasn't Written a Legend 线段树

    vp的时候没码出来.. 我们用set去维护, 每一块区域, 每块区域内的元素与下一个元素的差值刚好为ki,每次加值的时候我们暴力合并, 可以发现我们最多合并O(n)次. 然后写个线段树就没了. #in ...

  9. Codeforces 1136E - Nastya Hasn't Written a Legend - [线段树+二分]

    题目链接:https://codeforces.com/problemset/problem/1136/E 题意: 给出一个 $a[1 \sim n]$,以及一个 $k[1 \sim (n-1)]$, ...

  10. Nastya and King-Shamans CodeForces - 992E (线段树二分)

    大意: 给定序列a, 单点更新, 询问是否存在a[i]等于s[i-1], s为a的前缀和, a非负 考虑到前缀和的单调性, 枚举从1开始前缀和, 找到第一个大于等于s[1]的a[i], 如果相等直接输 ...

随机推荐

  1. Linux 命令查询系统负载信息

    linux uptime命令主要用于获取主机运行时间和查询linux系统负载等信息.uptime命令过去只显示系统运行多久.现在,可以显示系统已经运行了多长 时间,信息显示依次为:现在时间.系统已经运 ...

  2. 解决time命令输出信息的重定向问题

    解决time命令输出信息的重定向问题 time命令的输出信息是打印在标准错误输出上的, 我们通过一个简单的尝试来验证一下. [root@web186 root]# time find . -name ...

  3. git 教程1

    一. git简介 1.1 git是什么? 是一个分布式版本控制软件 1.2 git的作用是什么? 版本控制 ,团队协作 1.3 git的优势在哪里? 同类型的版本控制软件:CVS及SVN,Linus一 ...

  4. WEBGL学习【十四】利用HUD技术在网页上方显示三维物体

    关键点: <!--实现原理:要保证这两个canvas相互重叠;z-index表示了两个画布的上下层关系--> <!--是WEBGL的三维图形Canvas(主要用于绘制三维场景)--& ...

  5. 洛谷P1914 小书童——密码

    题目背景 某蒟蒻迷上了"小书童",有一天登陆时忘记密码了(他没绑定邮箱or手机),于是便把问题抛给了神犇你. 题目描述 蒟蒻虽然忘记密码,但他还记得密码是由一串字母组成.且密码是由 ...

  6. [LUOGU2730] 魔板

    搜索水题.因为只有8个数,排列一共有40320种,直接bfs,判重就行了. 但是判重的时候直接用8进制表示的话要88的bool数组.这种操作太low了,于是我们可以用康托展开,降成8!. 康托展开其实 ...

  7. [Preference] How to avoid Forced Synchronous Layout or FSL to improve site preference

    When tigger site updates the layout, it always follow this order: Javascript trigger style changes, ...

  8. VC与JavaScript交互(一) ———— 怎样实现

    为什么要让VC与JavaScript交互? 1.有时候我们须要让自己的软件打开一个网页.来获取页面上的一些数据. 这时,能够用mshtml解析HTML提取出数据.也能够向HTML文档动态写入我们准备好 ...

  9. SVN各种异常解决整理

    错误1:工作副本已锁定 由于周末公司server停机维护,今天在用SVN提交业务时,直接报错: 同一时候给了解决的方法:请运行清理命令 直接返回上级文件夹单击右键.运行清除命令后,再次提交! OK! ...

  10. DirectX11 学习笔记4 - 一个完整的封装框架

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3EzNjExMDYzMDY=/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...