数据结构
Aoxuets
REM 是我的, 拔剑吧!
展开
-
HDU 1394
题意 :求 循环序列的最小逆序数 线段树求出最初的逆序数, 吧 Num[1] 移动到 最后一位, 逆序数减少 Num【1】-1,单比Num【1】大的有 n - Num【1】个 ,又会增加 n - Num【1】个 故可快速求出 最小逆序数 #include#include#include#define lson l, m, rt<<1#define rson m+1, r, rt <原创 2016-03-14 10:54:35 · 245 阅读 · 0 评论 -
POJ2104 ---(区间第K 大)
学习划分树和主席树练得模板题。题目 :就是区间第K 大了。目前只会划分树和主席树了。Code:/* 划分树//#include <bits/stdc++.h>#include <iostream>#include <algorithm>#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1using namespace std;cons原创 2016-07-19 13:40:30 · 367 阅读 · 0 评论 -
CodeForces 671C - Ultimate Weirdness of an Array
题意:给以一个定义, F(l, r) 的值表示序列 A[1:n]的子序列A[1....(l-1),(r+1)...n] 之中 任意两个数的最大公约数的最大值。思路:英文题解 大致解释一下: H[i] 表示 F(l, r) <= i 区间 (l,r) 的个数。 V[A[i]] = { b1, b2, .... bk }, 其中 A[i] % bx == 0 还有一个next原创 2016-05-14 14:12:44 · 935 阅读 · 0 评论 -
Light OJ 1343 - Aladdin and the Black Stones
题目link 求偶数子序列 满足 的个数。分析首先, 我们先把每一对a[i] + a[j]存起来, 这样就可以把题目的偶数个条件无视了。设 T[i,j] = a[i] + a[j]; 因为我们是要求序列个数, 所以对于 [i,j]区间, 我们要找出 [i,j] 内有多少对满足 T[x,y] < T[i,j] 的。把 (i,j)想成坐标系的点, 那么上面求的就是 平面矩形 {[i,i],原创 2016-05-15 11:51:41 · 484 阅读 · 0 评论 -
Light OJ 1266 - Points in Rectangle
题目Link 就是查询矩形内有多少个点。分析二维树状数组维护就好了,。Code#include <bits/stdc++.h>const int maxn = 1000 + 131;struct Point { int x, y;};int Num[maxn][maxn];bool Vis[maxn][maxn];int lowbit(int x) { return x&(-x);原创 2016-05-15 09:27:51 · 461 阅读 · 0 评论 -
Light OJ 1085 - All Possible Increasing Subsequences
题目link 给定一个序列, 求出上升子序列的总数。分析Dp[i] 表示序列 以 i 结尾的数目。 可知 Dp[i]=∑Dp[x]+1Dp[i] = \sum Dp[x] + 1 这是一个前缀和, 用树状数组维护。Code#include <bits/stdc++.h>using namespace std;typedef long long LL;const int maxn = 1e原创 2016-05-14 22:04:00 · 401 阅读 · 0 评论 -
POJ 2082 (单调栈)
题目:给你一堆挤在一起的矩形(不可旋转)。问这些矩形能组成的面积最大矩形的面积是多少。思路:用单调栈, 使栈内矩形按照高度 H 严格递增。对于一个新的矩形q, 如果q.H < stack.top.H 就退回到可以压入的地方, 在退回时, 计算退去矩形的面积,取一次最大值。Code://#include <bits/stdc++.h>#include <iostream>#include <原创 2016-05-24 16:02:05 · 497 阅读 · 0 评论 -
LA 4108 (线段树)
区间更新 + 统计更新长度 稍稍不注意就T了 #include#define lson l, m, rt<<1#define rson m+1, r, rt<<1|1using namespace std;const int maxn = 100000 + 131;int Ma[maxn2], Mi[maxn2], Lazy[maxn2];int Cnt;voi原创 2016-03-14 10:55:26 · 574 阅读 · 0 评论 -
POJ 3368
题意: 给你一组数列, 查询区间内有出现次数最多的数的频数 RMQ , 对于一个区间, 分为两部分, 从 L 开始连续到 T , T + 1 到 R 显然 答案为 MAX (T – L + 1 , RMQ ( T+1, R)) 对于 T, 可以先预处理出位置 Pos #include#include#include#includeusing namespace std;原创 2016-03-14 10:55:38 · 257 阅读 · 0 评论 -
51nod--1174 区间中最大的数 (RMQ)
题目:1174 区间中最大的数 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出一个有N个数的序列,编号0 - N - 1。进行Q次查询,查询编号i至j的所有数中,最大的数是多少。 例如: 1 7 6 3 1。i = 1, j = 3,对应的数为7 6 3,最大的数为7。(该问题也被称为RMQ问题) Input 第1行:1个数N,表示序列的长原创 2016-03-22 11:24:14 · 521 阅读 · 0 评论 -
CF D. One-Dimensional Battle Ships
一个set水 + 区间判断个数问题。。。。 #include#include#include#includeset>using namespace std;int L,N,a,M;int main(){ setint> Pos; setint>::iterator it; cin >> L >> N >> a; {原创 2016-03-14 10:53:48 · 492 阅读 · 0 评论 -
HDU 4417 (二分 + 区间第k大)
题目:查询区间【L,R】中有多少数 比给定的 H 小。分析:我们可以这么想, H 一定会比 区间的第 X 大 ,第 X +1 小。 怎么确定 X。 这是一个单调的问题, 所以二分 + 区间第 K 大就可以确定了。Code:#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>using name原创 2016-07-19 14:22:59 · 370 阅读 · 0 评论