Codeforces Round #719 (Div. 3) F2. Guess the K-th Zero (Hard version) (交互题+线段树)

本文介绍了一种利用线段树解决区间查询与单点修改问题的算法,具体场景是在一个0/1数组中查找第k个0的下标并进行修改。通过二分思想和线段树的维护,可以高效地处理不超过6e4次的查询,同时保证了在2e5的数组大小范围内找到答案。代码中展示了线段树的构建、查询和更新过程。
摘要由CSDN通过智能技术生成

题目链接

题意:给定了一个长度为n的 只有0/1组成的数列,给出t行,每行给出一个整数k,可以询问若干次区间和,然后输出第k个0所在的位置下标。 总的询问次数不超过6e4。每次输出结果之后把第k个0改成1。
(1<=t<=1e4 , 1<=n<=2e5 保证第k个0一定存在。 )

分析:首先可以想到二分,但是这里又涉及单点修改。所以可以用线段树来维护区间和。 可以用数组vis[i]标记以i为根的区间的区间和是否已知。 细节见代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int,int>
const int maxn = 2e5+10;
const int mx = 40;
const int mod = 1e9+7;
const ll inf = 0x3f3f3f3f3f3f3f3f;
const int INF = 1e9+7;
int tree[maxn<<2];
bool vis[maxn<<2];//是否已经 线段树i号节点对应的区间是否已知
inline int lc(int rt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值