上一页 1 ··· 6 7 8 9 10 11 12 13 14 ··· 19 下一页

2013年5月5日

ZOJ3614 - Choir

摘要: 题目大意 给定一个大小为N*M的矩阵,接下来会给出一些查询,对于每个查询(a,b)要求你返回所有大小为a*b的子矩阵中方差(值最大的除外)最小的子矩阵的左下角坐标和方差 题解 方差公式为:,因此我们可以用两个数组来预处理一下,数组suma[i][j]表示左下角为(1,1),右上角为(i,j)的矩阵的和,sumb[i][j]表示左下角为(1,1),右上角为(i,j)的矩阵的平方和,剩下的问题就是在矩... 阅读全文

posted @ 2013-05-05 17:06 仗剑奔走天涯 阅读(148) 评论(0) 推荐(0) 编辑

RMQ总结

摘要: 以下摘自刘汝佳大神的《训练指南》。范围最小值问题(Range Minimum/Maximum Query,RMQ)。给出一个n个元素的数组A1,A2……An,设计一个数据结构,支持查询操作Query(L,R):计算min{A(L),A(L+1),……,A(R)} Sparse-Table算法能够很好的解决这个问题,它的预处理时间是O(nlogn),但是查询只需要O(1),而且常数很小。最重要的... 阅读全文

posted @ 2013-05-05 16:36 仗剑奔走天涯 阅读(279) 评论(0) 推荐(0) 编辑

2013年5月2日

树状数组总结

摘要: 最近做了近20道树状数组题目,发现有点痴迷于它了,这个数据结构真是太优美了,小巧又强悍,编程复杂度极其低,大爱呀!先丢上模板lowbit操作:int lowbit(int x){ return x&-x;}add操作:void add(int x,int d){ while(x0) { ret+=c[x]; x-=lowbit(x); } return ret;}运用树状数组我们可以解决一下几类问题:一、单点修改,区间查询这是树状数组最基本的操作一维:POJ3928 - Ping pongPOJ - Ultra-QuickSort(求逆... 阅读全文

posted @ 2013-05-02 18:23 仗剑奔走天涯 阅读(494) 评论(0) 推荐(0) 编辑

UVa11610 - Reverse Prime

摘要: 题目大意 定义了一种叫做Reverse Prime的数:位数为7位,倒转之后是六位的素数 要求按顺序找出所有的Reverse Prime,并计算出每个Reverse Prime的因子数 可以对这些数进行一下两种操作: 1、“q i”查询区间[0,i]Reverse Prime的因子数之和 2、“d reverse_prime”把reverse_prime这个Reverse Prime从序列中删除 ... 阅读全文

posted @ 2013-05-02 13:49 仗剑奔走天涯 阅读(218) 评论(0) 推荐(0) 编辑

SPOJ227 - Ordering the Soldiers

摘要: 题目大意给定一个序列a[1],a[2],a[3]…..a[n],a[i]表示位置i之前有a[i]个数比位置i上的数字大,要求你求出每一个位置上的具体数字题解直接上网上的题解吧。。。这题与正常的树状数组题目正好想反,给定数组b[i]表示i前面比a[i]大的点的个数,求a[]数组。我们可以先想想朴素的做法,比如b[] = {0, 1, 2, 0, 1},我们用数组c[i]表示还存在的小于等于i的个数,一开始c[] = {1, 2, 3, 4, 5},下标从1开始。 我们从右向左扫描b[]数组,b[5] = 1,说明该点的数是剩下的数中第4大的,也就是小于等于它的有4个,即我们要找最小的j符合c[j 阅读全文

posted @ 2013-05-02 13:23 仗剑奔走天涯 阅读(151) 评论(0) 推荐(0) 编辑

2013年4月23日

SPOJ1029 - Matrix Summation

摘要: 题目大意给定一个N*N的矩阵A,每个元素的初始值为0,可以对矩阵进行一下两种操作:1、修改A[i][j]的值为d,(1<=i,j<=N)2、查询左下角坐标为(x1,y1),右上角坐标为(x2,y2)的子矩阵的元素和题解基本的树状数组,单点增减,区间求和#include<iostream>#include<cstring>#include<cstdio>#define MAXN 1050using namespace std;int n;int c[MAXN][MAXN],a[MAXN][MAXN];int lowbit(int x){ retur 阅读全文

posted @ 2013-04-23 01:55 仗剑奔走天涯 阅读(197) 评论(0) 推荐(0) 编辑

HDU3584 - Cube

摘要: 题目大意 给定一个体积为N*N*N立方体,每个单位小立方体A[x][y][z]里有一个值,初始值全部为0,我们可以对立方体进行一下两种操作: 1、查询A[x][y][z]的奇偶性 2、对子立方体的每个元素的值进行增减 题解 三维树状数组,就是POJ2155 Matrix的三维推广形式 代码: #include<iostream>#include<cstdio>#include<cstring>#d... 阅读全文

posted @ 2013-04-23 01:45 仗剑奔走天涯 阅读(224) 评论(0) 推荐(0) 编辑

HDU3015 - Disharmony Trees

摘要: 题目大意 和POJ1990是一样的,只是把max改成min了。。。 给定N对二元组(x1,y1),(x2,y2),(x3,y3)…(xn,yn).每两个二元组之间(假设分别为i和j,i!=j)将会产生一个值ans(i,j)=min(xi,xj)*|yi-yj|,计算出sigma(ans(i,j))(1<=i,j<=n,i!=j) 题解 需要对x,y进行离散,然后把y值按降序排序,之后的做法和POJ... 阅读全文

posted @ 2013-04-23 01:26 仗剑奔走天涯 阅读(238) 评论(0) 推荐(0) 编辑

POJ1990 - MooFest

摘要: 题目大意给定N对二元组(x1,y1),(x2,y2),(x3,y3)…(xn,yn).每两个二元组之间(假设分别为i和j,i!=j)将会产生一个值ans(i,j)=max(xi,xj)*|yi-yj|,计算出sigma(ans(i,j))(1<=i,j<=n,i!=j)题解我们可以先对x值按升序排序,之后就是用两个树状数组进行维护了,公式推导过程不知道怎么讲。。。直接看代码好了。。。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#define 阅读全文

posted @ 2013-04-23 01:20 仗剑奔走天涯 阅读(235) 评论(0) 推荐(0) 编辑

POJ3321 - Apple Tree

摘要: 题目大意有一颗苹果树,它有N个树叉,每个树叉最开始的时候都结了一个苹果,有时卡卡会从树上把某个苹果摘下来,有时没结苹果的树叉上又会长出苹果来,卡卡有时还想知道某个子树的总苹果数量有多少题解题目也是要求实现单点加减,区间求和的功能,赤裸裸的树状数组呀,不过此题给出的不是一个线性的序列,而是树形的,因此我们需要先进行预处理,把树转换为线性序列。用邻接表建立好树,然后对树进行重新编号,这个可以用DFS来实现,每个节点记录第一次访问和最后一次访问时的编号,假设为l和r,那么区间[l,r]之间的所有编号是以此节点为根节点的子树的各个节点的编号,这样就把树转化为线性结构了,之后就是用树状数组来处理了代码: 阅读全文

posted @ 2013-04-23 00:09 仗剑奔走天涯 阅读(281) 评论(0) 推荐(0) 编辑

2013年4月22日

POJ3468 - A Simple Problem with Integers

摘要: 题目大意 给定N个整数,A1,A2,A3…An。可以对这些数进行一下两种操作: 1、"C a b c" 对区间[a,b]内的所有数都加上c 2、"Q a b"询问区间[a,b]的和 题解 一般树状数组都是实现单点修改和区间求和或者单点查询和区间加减的功能,而此题是要求实现区间查询,区间加减的功能,我们依然能够用树状数组来处理,具体怎么处理请参看wyl神牛的树状数组总结吧 代码: #include<... 阅读全文

posted @ 2013-04-22 23:27 仗剑奔走天涯 阅读(167) 评论(0) 推荐(0) 编辑

2013年4月20日

HDU1166 - 敌兵布阵

摘要: 题目大意 给定N个数,可以对这些数进行三种操作: 1、Add(i,x),对第i个数增加x 2、Sub(i,x),对第i个数减x 3、Query(x,y) ,查询区间[x,y]的和 题解 赤裸裸的树状数组啊。。。我还二逼得WA了两次,原因是读入字符串的时候用的while(cin>>s),然后就一直不能退出循环了,不知道为啥会这样。。。换成C语言风格的字符串,然后用scanf读入就没问题了。。尼玛坑爹... 阅读全文

posted @ 2013-04-20 00:08 仗剑奔走天涯 阅读(239) 评论(0) 推荐(0) 编辑

2013年4月19日

POJ2155 - Matrix

摘要: 题目大意 给定一个大小为N*N的矩阵,每个元素要么为0要么为1,刚开始时A[i][j]=0,(1<=i,j<=N) 每次给出矩阵的左下角坐标(x1,y1)和右上坐标(x2,y2),将矩阵中的所有数组取反,或者给出一个坐标(x,y),要求你查询A[x][y]的值是多少。 题解 查询一个点和修改一个区间,这刚好是树状数组的可以实现的功能 代码: #include<iostream>#include<c... 阅读全文

posted @ 2013-04-19 22:51 仗剑奔走天涯 阅读(146) 评论(0) 推荐(0) 编辑

POJ1195 - Mobile phones

摘要: 题目大意 给定一个N*N的网格,刚开始每个网格的值都是0,接下来会对这些网格进行操作,有一下两种操作: 1、”X Y A“对网格C[x][y]增加A 2、”L B R T“ 查询所有(L<=X<=R,B<=Y<=T)的网格C[X[Y],并返回它们的总和 题解 非常经典的二维树状数组题目,直接看代码吧 代码 #include<iostream>#include<cstdio>#include<cst... 阅读全文

posted @ 2013-04-19 22:38 仗剑奔走天涯 阅读(157) 评论(0) 推荐(0) 编辑

POJ3067 - Japan

摘要: 题目大意 日本岛的东海岸和西海岸分别有N和M个城市,在这些城市中有K条高速公路,每条公路连接着东海岸一个城市和西海岸的一个城市,问总共这些公路有多少交叉点 题解 认真观察可以发现,只有这种情况两个线段(规范的)才是有交点的,假设两条的坐标的左右端点分别为(x1,y1)和(x2,y2),只有当x1<x2并且y1>y2或者x1>x2并且y1<y2的时候两个线段才是相交的。这样的话就很好解决这个题目了,... 阅读全文

posted @ 2013-04-19 22:25 仗剑奔走天涯 阅读(444) 评论(0) 推荐(0) 编辑

上一页 1 ··· 6 7 8 9 10 11 12 13 14 ··· 19 下一页

导航