qduoj 帅气的HYC的珍珠 (树状数组)

2023-11-02 08:51

本文主要是介绍qduoj 帅气的HYC的珍珠 (树状数组),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接:https://qduoj.com/problem/37/点击打开链接

帅气的HYC的珍珠

发布时间: 2015年11月1日 17:02   最后更新: 2015年11月2日 19:52   时间限制: 1000ms   内存限制: 128M

                                              u=3141956546,3693233694&fm=21&gp=0.jpg

帅气的HYC经常早晨去锻炼(多么好的习惯~。有一天,他看到一路上的露珠,心里便产生了一个问题:一路上假如有N棵草,每颗草上可能会有露珠,或者没有露珠。连续的露珠会和为一体(>=2),并变为珍珠。

比如第1棵草上有露珠,第2棵草也有露珠。那么就会形成一个珍珠。第1棵草上有露珠,第2棵草有露珠,第3棵也有露珠,那么也会形成一个珍珠。相反,如果第1颗草有露珠,第2棵草没有露珠,就不会形成珍珠。

现在给你HYC今天早晨一路上的看到的N棵草,以及上面的露珠情况,给你Q次询问,每次询问[L,R],你能快速的告诉HYC,这个区间能形成多少个珍珠吗?ACCEPTIT!

第1行一个整数T,表示有T组测试数据。(T<=15)
第2行一个整数N, 表示有N棵草。(1<=N<=1000)
第3行有N个整数0或者1,中间用空格隔开, 1代表第i课草有露珠,0代表第i棵草没有露珠。
第4行是一个整数Q, 代表查询的次数。(1<=Q<=100000)
下面第(4+Q)行每行两个整数L, R。 代表查询的区间[L, R];(1<=L<=R<=N)

对于每组查询输出一行。

  复制
1
4
1 1 0 1
3
1 2
2 3
1 4
1
0
1


看了学长的代码才会 因为区间查询时考虑的情况很多 树状数组会比线段树方便很多

#include <iostream>
#include <queue>
#include <stdio.h>
#include <stdlib.h>
#include <stack>
#include <limits>
#include <string>
#include <string.h>
#include <vector>
#include <set>
#include <map>
#include <algorithm>
#include <math.h>
using namespace std;
#define maxn 500005
int aa[maxn];
int a[maxn];
int lowbits(int x)
{return x&(-x);
}
int getsum(int pos)
{int ans=0;while(pos>0){ans+=aa[pos];pos-=lowbits(pos);}return ans;
}
void update(int pos,int val)
{while(pos<=maxn){aa[pos]+=val;pos+=lowbits(pos);}
}
int main(void)
{int t;int n,m;scanf("%d",&t);while(t--){scanf("%d",&n);memset(a,0,sizeof(a));for(int i=1;i<=n;i++)scanf("%d",&a[i]);memset(aa,0,sizeof(aa));for(int i=3;i<=n;i++)if(a[i-2]&&a[i-1]&&!a[i])update(i-1,1);if(a[n] && a[n-1]) update(n, 1);int m,l,r;scanf("%d",&m);while(m--){scanf("%d%d",&l,&r);if(l==r){printf("0\n");continue;}int ans=getsum(r)-getsum(l-1);if(a[r]&&a[r-1]&&a[r+1]) ans++;if(a[l-1]&&a[l]&&!a[l+1]) ans--;printf("%d\n",ans);}}return 0;
}





这篇关于qduoj 帅气的HYC的珍珠 (树状数组)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/329498

相关文章

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

JAVA数组中五种常见排序方法整理汇总

《JAVA数组中五种常见排序方法整理汇总》本文给大家分享五种常用的Java数组排序方法整理,每种方法结合示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录前言:法一:Arrays.sort()法二:冒泡排序法三:选择排序法四:反转排序法五:直接插入排序前言:几种常用的Java数组排序

Java数组初始化的五种方式

《Java数组初始化的五种方式》数组是Java中最基础且常用的数据结构之一,其初始化方式多样且各具特点,本文详细讲解Java数组初始化的五种方式,分析其适用场景、优劣势对比及注意事项,帮助避免常见陷阱... 目录1. 静态初始化:简洁但固定代码示例核心特点适用场景注意事项2. 动态初始化:灵活但需手动管理代

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

C++原地删除有序数组重复项的N种方法

《C++原地删除有序数组重复项的N种方法》给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度,不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(... 目录一、问题二、问题分析三、算法实现四、问题变体:最多保留两次五、分析和代码实现5.1、问题分析5.

Java中数组转换为列表的两种实现方式(超简单)

《Java中数组转换为列表的两种实现方式(超简单)》本文介绍了在Java中将数组转换为列表的两种常见方法使用Arrays.asList和Java8的StreamAPI,Arrays.asList方法简... 目录1. 使用Java Collections框架(Arrays.asList)1.1 示例代码1.

C++一个数组赋值给另一个数组方式

《C++一个数组赋值给另一个数组方式》文章介绍了三种在C++中将一个数组赋值给另一个数组的方法:使用循环逐个元素赋值、使用标准库函数std::copy或std::memcpy以及使用标准库容器,每种方... 目录C++一个数组赋值给另一个数组循环遍历赋值使用标准库中的函数 std::copy 或 std::