首页 > 其他分享 >C1. Good Subarrays (Easy Version)

C1. Good Subarrays (Easy Version)

时间:2023-12-05 21:46:33浏览次数:46  
标签:Good int Subarrays long Version 端点 C1 define

思路:我们枚举每一个左端点,对于每一个左端点,寻找最长的满足条件的区间,这个区间长度就是左端点对答案的贡献,可以发现具有单调性,右端点只会前进不会倒退。所以我们两个指针各扫一遍区间就可以。

#include <bits/stdc++.h> 
#define ls p<<1
#define rs p<<1|1
#define PII pair<int, int>
#define ll long long
#define db double
#define ull unsigned long long
#define endl '\n'
#define io ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
using namespace std;
const int N = 2e5 + 10;
int t, a[N];
 
 
void solve()
{
	int n; cin >> n;
	ll ans = 0;
	for(int i = 1; i <= n; ++ i)	cin >> a[i];
	for(int l = 1, r = 1; l <= n; ++ l)
	{
		while(r <= n && a[r] >= r - l + 1)	++ r;
		-- r;
		ans += (r - l + 1);
	}
	cout << ans << endl;
}
 
 
int main()
{
	io
//	freopen("1.in", "r", stdin);
	cin >> t;
	while(t --)	
	solve(); 
	return 0;
}

标签:Good,int,Subarrays,long,Version,端点,C1,define
From: https://www.cnblogs.com/cxy8/p/17876776.html

相关文章

  • [ARC141D] Non-divisible Set 题解
    题目链接点击打开链接题目解法很思维的题,需要用好所有的特殊性质暴力的做法是建出图,然后求包含点\(i\)的最长反链,但这明显过不了上面的做法没用到\(a_i<2m\)的性质如何用?把\(a_i\)拆分成\(q\times2^k\;(k\)为奇数\()\)的形式,那么对于同一个\(q\),只能在其中选一个......
  • C1. Good Subarrays (Easy Version)(推公式找性质)
    思路:\[能想到平方是比较特殊的,因为x*x一定是x的倍数也就是说\sqrt[2]{x*x}={x}\]\[所以需要考虑平法之间的数手模一下样例可以发现[x^2,(x+1)^2)之间是x倍数的有x^2\]\[x*(x+1),x*(x+2)这三个,所以可以知道平方之间有三个,只要讨论一下出来整个区间边界还有多少个\]这里可......
  • [good]串口读取
    #include<stdio.h>#include<stdlib.h>#include<math.h>#include<limits.h>#include<string.h>#include<windows.h>#include"serialport.h"intmain(){//wordbyteWORD_BYTEwb;wb.word=0x12......
  • [ARC141E] Sliding Edge on Torus 题解
    题目链接点击打开链接题目解法比较套路的题首先画个图,然后把\(y-x\)相同的变成一个点(使\(y>x\))然后再两个点之间连有权边那么问题就变成求新图的每个连通块中形成的原图的连通块数量手玩几个数据发现,原图的连通块数量即为新图的所有环长的\(\gcd\),再和\(n\)的\(\gcd......
  • [ARC120E] 1D Party 题解
    提供二分+DP做法。Solution题意给出\(n(\le2\times10^5)\)个单调递增偶整数\(a_i\),求最小的\(k\)满足每一个\(i\)都可以在\(k\)时刻之前(含)与相邻的数相遇。每个单位时间可以移动一个单位距离。思路启发式思考在想到正解之前,我们可以想想类正解。显然,在时间一单......
  • 代码随想录算法训练营第5天 | lc242、lc349、lc202、lc1
    (本合集全部为Go语言实现)相关文章链接:242题解349202题解1题解相关视频链接:Leetcode242状态:秒了实现过程中的难点:对于元素固定是小写字母或类似的情况,可以使用数组,因为元素最大数量是固定的个人写法funcisAnagram(sstring,tstring)bool{iflen(s)!=len(t)......
  • 代码随想录算法训练营第4天 | lc24、lc19、lc面试题02.07、lc142
    (本合集全部为Go语言实现)相关文章链接:24题解19题解02.07题解142题解相关视频链接:Leetcode24状态:秒了实现过程中的难点:对组内两个节点的指针指向流转需要倒腾明白。临时头结点真的很有用个人写法funcswapPairs(head*ListNode)*ListNode{tmpHead:=&ListNode{-......
  • 语句-C1-2023/12/2
    ......
  • AT_ARC161B解题报告
    AT_ARC161B解题报告题意题目传送门给你一个正整数\(N\),求小于等于\(N\)的所有数中最大的一个在二进制下拥有\(3\)个\(1\)的数。思路我们先看无解的情况,因为题目要求必须有\(3\)个\(1\),所以当\(n\leq6\)时,直接输出\(-1\)。我们可以考虑使用递归,设\(f(X)\)......
  • AT_ARC158A解题报告
    AT_ARC158A解题报告题意题目传送门给你3个数\(a,b,c\),通过若干次操作使得\(a=b=c\)。一次操作指将\(a,b,c\)按任意顺序分别\(+3,+5,+7\)。若可以使\(a=b=c\),输出最小操作次数,否则输出\(-1\)。思路我们可以将\(+3,+5,+7\)每一项都减去\(5\)得到\(-2,0,+2\)。......