题意:给定一个区间,q个查询,对于每次查询回答这个区间内所有不重复的数的和。
思路:可以考虑使用树状数组来做。
先读入所有查询,离线来做,将所有查询按右端点升序排序。
那么我们从给定区间的第一个元素开始遍历这个区间,在此过程中更新每一个元素上一次出现的位置,每次将现在位置加上a[i]并将lastpos位置减去a[i],
也就是说,我们每一步都是保留与当前位置距离最近的重复元素值,其余置零,...
分类:
编程语言 时间:
2015-08-06 02:04:42
阅读次数:
125
一、理解 像扑克那样,一张一张地摸牌然后排序。二、算法流程(升序) (1)从第二张牌开始,将其取出,赋给一个临时变量temp 将temp和前一个A[K]对比,若temp小于A[K],则将A[K]往后移动一位,再和A[K-1]对比...直到对比完第一位或者找到一个比temp小的数 ...
分类:
编程语言 时间:
2015-08-05 18:09:30
阅读次数:
130
??
解析、查找数组中重复出现的元素,Java实现。
《数据结构与算法分析:解析、查找数组中重复出现的元素》
问题描述:一个结构化数据,假设事先按照某种顺序排好序(比如升序)的一个数组中,无规则、重复出现若干次某个相同元素,形如有序数组data:
data = { "A", "A", "B", "C", "C", "D", "D" , "D" }
data数组中,事先已经按照...
分类:
编程语言 时间:
2015-08-05 08:57:30
阅读次数:
180
??
题意:给定n(n
思路:首先贪心的思想,去除掉包含其他区间的大区间,这样做肯定不会影响结果。
然后对于所有区间,按照左端点升序排序,那么由于这时所有区间不相互包含,他们的右端点也是递增的。
那么对于每个询问,肯定是从左到右去尽可能多的区间,这个贪心容易想到。
对数据离散化,记录从每个点开始的经过i个区间所达到的最近距离,这一步用到了倍增的思想,因为如果一个点一个点顺序找,那么时间复...
分类:
其他好文 时间:
2015-08-05 07:50:03
阅读次数:
114
Order by按照字段值进行排序,默认升序(asc)。校对规则决定排序关系。
order by 字段 升序|降序(asc|desc),Order by允许多字段排序。
指的是,先按第一个字段排序,如果不能区分,才使用第二个字段,以此类推。create table test(
id int primary key not null auto_increment,
name varchar(10)...
分类:
数据库 时间:
2015-08-04 00:46:08
阅读次数:
196
题目的愿意很简单,给你一个n,求在升序排列的情况下,第k个与之相互素的数。
解法:首先我们要知道gcd(b×t+a,b)=gcd(a,b),那么接下来就很简单了,所有与之互素的数都是以phi(n),为周期的,所以暴力求解即可。#include
#include
#include
#include
#include...
分类:
其他好文 时间:
2015-08-03 01:15:18
阅读次数:
181
3. 蛤蟆的数据结构进阶三静态查询之折半查询
本篇名言:“但是话不行,要紧的是做。 --
鲁迅”
继续来看静态查询的折半查询。
欢迎转载,转载请标明出处:
1. 折半查找
折半查找要求查找表用顺序存储结构存放且各数据元素按关键字有序(升序或隆序)排列,也就是说折半查找只适用于对有序顺序表进行查找。
折半查找的基本思想是:首先以整个查找表作为查找范围,用查找条件中...
分类:
其他好文 时间:
2015-08-02 23:24:18
阅读次数:
138
//一个无向图 ,每个点都有高度,
//问从起点1到终点n的最高点减最低点的差值最小的前提下的最短路和这个差值
//由于n<100所以可以先将这n个点按升序排,枚举这个最短路的左边最小mi,二分找最小的右边ma
#include
#include
#include
#include
using namespace std ;...
分类:
其他好文 时间:
2015-08-02 18:19:56
阅读次数:
81
//字符串排序*****
/*
===============================================================
对任意个字符串升序排列!
===============================================================
*/
#include
#include
#define N 3 ...
分类:
编程语言 时间:
2015-08-02 06:26:31
阅读次数:
297
题意:有5个集合,集合的大小是n,每一个集合出一个数,问能不能找到五个数的和为0。数据范围:T
分析:
暴力枚举是n^5*T,超时,那么就要用一些技巧了。
这里有一个指针的妙用:如何在O(n)的复杂度找A,B,使得A+B==C(A,B分别属于一个数列a,b)。做法是先把a,b分别按升序排序,然后一个指针i指向a的首,指针j指向b的尾,判定指针指向的数的和是否==C,若等于则结束查找,若小于,...
分类:
其他好文 时间:
2015-08-02 01:04:46
阅读次数:
131