QOJ.ac

QOJ

Time Limit: 2 s Memory Limit: 512 MB Total points: 100 Hackable ✓

#23634. 三角形区间计数

Statistics

给定一个长度为 $n$ 的数组 $A=[a_1,a_2,\dots,a_n]$ 。

对于一个区间 $[x,y]$($1\le x\le y\le n$),如果能从下标 $x,x+1,\dots,y$ 中选出三个两两不同的下标 $i,j,k\ (x\leq i\lt j\lt k\leq y)$,使其对应的数值可以作为一个三角形的三条边的长度,即 $a_i+a_j\gt a_k, a_i+a_k\gt a_j, a_j+a_k\gt a_i$ ,就称 $[x,y]$ 是一个三角形区间。特别地,长度小于 $3$ 的区间永远不是三角形区间。

现在需要支持 $q$ 次操作,每次操作是下面两种之一:

  • 第一类操作: $1\ p\ v\ (1\leq p\leq n, 1\leq v\leq 10^{18})$ ,将 $a_p$ 修改为 $v$ 。
  • 第二类操作: $2\ l\ r\ (1\leq l\leq r\leq n)$ ,查询满足 $l\le x\le y\le r$ 的所有区间 $[x,y]$ 中,有多少个是三角形区间。

请对于每一个第二类操作,输出对应的统计结果。

输入格式

每个测试点包含多组测试用例。第一行包含测试用例的数量 $T$($1\le T\le 10^4$)。

对于每个测试用例:

  • 第一行包含两个整数 $n$, $q$($1\leq n\leq 10^6,~1\leq q\leq 2\times 10^4$),表示序列 $A$ 的长度以及查询的次数。
  • 第二行包含 $n$ 个整数 $a_1,a_2,\ldots,a_n$($1\le a_i\le 10^{18}$),表示给定序列 $A$ 的各个元素。
  • 接下来的 $q$ 行,每行包含 $3$ 个整数,表示一次操作,两类操作的输入格式可见题目描述。

保证所有测试用例的 $n$ 之和不超过 $10^6$ ,所有测试用例的 $q$ 之和不超过 $2\times 10^4$ ,保证每个测试用例至少有一次第二类操作。

输出格式

对于每一次第二类操作,输出 $[l,r]$ 内的三角形区间个数。

样例

样例输入 1

2
6 5
3 4 5 1 1 100
2 1 3
2 4 6
1 6 1
2 4 6
2 1 6
3 1
1 1 1
2 1 3

样例输出 1

1
0
1
7
1

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.