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) 编辑

POJ24810 - Cows

摘要: 题目大意 给定N对二元组(s,e),对于第i对二元组(s[i],e[i]),在前1~i-1对二元组中计算出符合这样要求的二元组(s[j],e[j])的总数量,s[j]<=s[i],e[j]>=e[i],并且e[j]-s[j]>e[i]-s[i]。 题解 先按e降序排序,如果e相等则按s升序排序,这样处理之后,接下来就和POJ2352的stars的处理是一样的,对于第i个数,只要小于a[i].s的数... 阅读全文

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

HDU1556 - Color the ball

摘要: 题目大意给定区间[1,N],初始时区间的每个数都是0,对其进行多次操作,每次给出两个数a和b,要求你对在区间[a,b]的数全部加1,在操作结束后输出每个数的值题解最基础的树状数组了,就是修改区间[a,b]的值,询问单个元素的值代码:#include<iostream>#include<cstring>#include<cstdio>#define MAXN 100005using namespace std;int c[MAXN];int n;int lowbit(int x){ return x&-x;}void add(int x,int d){ 阅读全文

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

UVa12086 - Potentiometers

摘要: 题目大意给定n个数,你的任务是实现如下两种操作:“S x y“ 把第x个数修改为y“M x y”计算第X个数到第Y个数之和题解这刚好是树状数组的功能,修改元素的值和求区间和代码#include<iostream>#include<cstdio>#include<cstring>#include<string>#define MAXN 200005using namespace std;int n;int c[MAXN];int lowbit(int x){ return x&-x;}void add(int x,int d){ while 阅读全文

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

导航