U34379.树状数组二分

普及+/提高

通过率:0%

时间限制:1.00s

内存限制:128MB

题目描述

已知一个数列 aa,你需要进行下面两种操作:

  1. 将某一个数修改成 dd
  2. 查询最大的 P(0Pn)P(0\le P \le n) 满足 i=1P ais\sum_{i=1}^P\ a_i \le s

输入格式

第一行包含两个整数 n,mn, m,分别表示该数列数字的个数和操作的总个数。

第二行包含 nn 个用空格分隔的整数,其中第 ii 个数字表示数列第 ii 项的初始值。

接下来 mm 行每行包含 2233 个整数,表示一个操作,具体如下:

  1. 1 x d:将第 xx 个数改成 dd
  2. 2 s:查询最大的 P(0Pn)P(0\le P \le n) 满足 i=1P ais\sum_{i=1}^P\ a_i \le s

输出格式

对于每一个查询,输出一行,表示答案。

输入输出样例

  • 输入#1

    5 5
    1 2 3 4 5
    2 6
    2 11 
    2 15
    1 2 11
    2 15

    输出#1

    3
    4
    5
    3

说明/提示

对于 50%50\% 的数据:n1000n \le 1000m1000m \le 1000
对于 80%80\% 的数据: 1n,m21051 \le n, m \le 2*{10}^5
对于 100%100\% 的数据: 1n,m21061 \le n, m \le 2*{10}^6

  • 1ai1091 \le a_i \le 10^9
  • 1d1091 \le d \le 10^9
  • 1s10151 \le s \le 10^{15}

保证任意时刻数列中所有元素的绝对值之和 1018\le {10}^{18}

此题输入较多需要关闭流加速

    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
首页