CF992E Nastya and King-Shamans 解题报告
CF992E Nastya and King-Shamans
题意翻译
给定一个序列 \(a_i\),记其前缀和序列为 \(s_i\),有 \(q\) 个询问,每次单点修改,询问是否存在一个 \(i\) 满足 \(a_i=s_{i-1}\),有多解输出任意一个,无解输出 \(-1\)。
输入输出格式
输入格式:
The first line contains two integers \(n\) and \(q\)
The second line contains n n integers \(a_{1},...,a_{n}\),where \(a_{i}\)is the magic power of the \(i\)-th shaman.
After that \(q\) lines follow, the \(i\) -th of them contains two integers \(p_{i}\) and \(x_{i}\)that mean that the new power of the \(p_{i}\).
输出格式:
Print \(q\) lines, the \(i\) -th of them should contain \(-1\) , if after the \(i\) -th change there are no shaman-kings, and otherwise a single integer \(j\) , where \(j\) is an index of some king-shaman after the \(i\) -th change.
If there are multiple king-shamans after each change, print the index of any of them.
数据范围
\(1 \le n,q \le 10^5,0 \le a_i \le 10^9,1 \le p_i \le n,0 \le x_i \le 10^9\)
注意一下数据范围,发现都是正整数。
所以前缀和按位置是不降的。
考虑一个暴力,找到每个\(a_i \ge s_{i-1}\)的位置,然后检查它是否合法。
考虑这样的一个位置最多有多少个,发现不超过\(log 10^9\),所以这个暴力复杂度是对的。
至于实现,可以线段树维护\(a_i-s_{i-1}\)的最大值,支持区间加全局查询就行了。
Code:
#include <cstdio>
#define ll long long
#define ls id<<1
#define rs id<<1|1
const int N=2e5+10;
ll max(ll x,ll y){return x>y?x:y;}
ll mx[N<<2],a[N],f[N],tag[N<<2],x;
int n,q;
void updata(int id){mx[id]=max(mx[ls],mx[rs]);}
void build(int id,int l,int r)
{
if(l==r)
{
mx[id]=a[l]-f[l-1];
return;
}
int mid=l+r>>1;
build(ls,l,mid),build(rs,mid+1,r);
updata(id);
}
void pushdown(int id)
{
if(tag[id])
{
tag[ls]+=tag[id],tag[rs]+=tag[id];
mx[ls]+=tag[id],mx[rs]+=tag[id];
tag[id]=0;
}
}
void change1(int id,int l,int r,int p,ll d)
{
if(l==r)
{
mx[id]+=d;
return;
}
pushdown(id);
int mid=l+r>>1;
if(p<=mid) change1(ls,l,mid,p,d);
else change1(rs,mid+1,r,p,d);
updata(id);
}
void change0(int id,int L,int R,int l,int r,ll d)
{
if(l>r) return;
if(l==L&&r==R)
{
tag[id]+=d,mx[id]+=d;
return;
}
pushdown(id);
int Mid=L+R>>1;
if(r<=Mid) change0(ls,L,Mid,l,r,d);
else if(l>Mid) change0(rs,Mid+1,R,l,r,d);
else change0(ls,L,Mid,l,Mid,d),change0(rs,Mid+1,R,Mid+1,r,d);
}
int query(int id,int l,int r)
{
if(l==r) return mx[id]==0?l:-1;
if(mx[id]<0) return -1;
pushdown(id);
int mid=l+r>>1;
int la=query(ls,l,mid);
return ~la?la:query(rs,mid+1,r);
}
int main()
{
scanf("%d%d",&n,&q);
for(int i=1;i<=n;i++) scanf("%lld",a+i),f[i]=f[i-1]+a[i];
build(1,1,n);
for(int p,i=1;i<=q;i++)
{
scanf("%d%lld",&p,&x);
change0(1,1,n,p+1,n,a[p]-x);
change1(1,1,n,p,x-a[p]);
a[p]=x;
printf("%d\n",query(1,1,n));
}
return 0;
}
2018.10.9
CF992E Nastya and King-Shamans 解题报告的更多相关文章
- CH Round #56 - 国庆节欢乐赛解题报告
最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...
- 二模13day1解题报告
二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...
- BZOJ 1051 最受欢迎的牛 解题报告
题目直接摆在这里! 1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4438 Solved: 2353[S ...
- 习题:codevs 2822 爱在心中 解题报告
这次的解题报告是有关tarjan算法的一道思维量比较大的题目(真的是原创文章,希望管理员不要再把文章移出首页). 这道题蒟蒻以前做过,但是今天由于要复习tarjan算法,于是就看到codevs分类强联 ...
- 习题:codevs 1035 火车停留解题报告
本蒟蒻又来写解题报告了.这次的题目是codevs 1035 火车停留. 题目大意就是给m个火车的到达时间.停留时间和车载货物的价值,车站有n个车道,而火车停留一次车站就会从车载货物价值中获得1%的利润 ...
- 习题: codevs 2492 上帝造题的七分钟2 解题报告
这道题是受到大犇MagHSK的启发我才得以想出来的,蒟蒻觉得自己的代码跟MagHSK大犇的代码完全比不上,所以这里蒟蒻就套用了MagHSK大犇的代码(大家可以关注下我的博客,友情链接就是大犇MagHS ...
- 习题:codevs 1519 过路费 解题报告
今天拿了这道题目练练手,感觉自己代码能力又增强了不少: 我的思路跟别人可能不一样. 首先我们很容易就能看出,我们需要的边就是最小生成树算法kruskal算法求出来的边,其余的边都可以删掉,于是就有了这 ...
- NOIP2016提高组解题报告
NOIP2016提高组解题报告 更正:NOIP day1 T2天天爱跑步 解题思路见代码. NOIP2016代码整合
- LeetCode 解题报告索引
最近在准备找工作的算法题,刷刷LeetCode,以下是我的解题报告索引,每一题几乎都有详细的说明,供各位码农参考.根据我自己做的进度持续更新中...... ...
随机推荐
- js字符转数字
js字符串转数字 转换函数.强制类型转换.利用js变量弱类型转换. 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把值转换成浮点数.只 ...
- PL/sql中如何声明变量,常量,控制语句及for,loop,while和顺序控制的使用
pl/sql 什么是PL/SQL PL/SQL是结合oracle过程语言和机构化查询运行(SQL) 的一种扩展语言.使用PL/SQL可以编写具有很多高级功能的程序,有以下优点 PL/SOL可以采用过程 ...
- Linux系统完整安装在虚拟机Mini
打开VMware Workstation虚拟机,然后如下图一步到位: 此处只是简单的安装Linux系统,要想查看安装后的IP等配置看: https://www.cnblogs.com/gentle-a ...
- Hive的数据库和表
本文介绍一下Hive中的数据库(Database/Schema)和表(Table)的基础知识,由于篇幅原因,这里只是一些常用的.基础的. Hive的数据库和表 先看一张草图: Hive结构 从图上可以 ...
- [洛谷1156]垃圾陷阱(DP)
[Luogu1156] f[i]表示高度为i时的存活时间 Code #include <cstdio> #include <algorithm> #define N 110 u ...
- [Uva11178]Morley's Theorem(计算几何)
Description 题目链接 Solution 计算几何入门题 只要求出三角形DEF的一个点就能推出其他两个点 把一条边往内旋转a/3度得到一条射线,再做一条交点就是了 Code #include ...
- B-树 动机与结构
Ps.我们遵循从感性到理性的认知顺序来逐步探索B-树的奥秘,之前经常说的value这里用key(关键码)指代,因为可能存的是字符串,说是value就不合适了. (多图预警!!!建议在WI-FI下观看) ...
- HTML中body相关标签-02
今日内容: 字体标签: h1~h6.<font>.<u>.<b>.<strong><em>.<sup>.<sub> ...
- Java-JNA使用心得
自上个月20号,历时整整一个月,终于找到工作入职了. 然后这段时间一直看公司的框架还有业务方面的东西.其实由于给分配了一个研究Java调用C语言接口的问题,导致框架业务方面的东西还不熟,然后现在手上又 ...
- 《Cracking the Coding Interview》——第12章:测试——题目1
2014-04-24 23:10 题目:找出下面代码里的错误. 解法:请看下面. 代码: // 12.1 What's wrong with the following code segment? # ...