- 博客(12)
- 收藏
- 关注
原创 hdu 5908 哈希
题目链接:点击打开链接题意:问把一段区间分成相同数个数相同几份。 分析:直接枚举约数,然后判断两个区间相不相等,这里可以考虑区间哈希(数据比较水 , 所以愉快的水过去了23333)详情见代码:#includeusing namespace std;const int maxn = 1e5 + 20;typedef unsigned long long ul;int A[m
2016-11-12 14:28:56
418
原创 uvalive 4015 树形背包dp
题意:给你一颗n个节点的树,求从根节点出发最多走x远,问最多能经过多少个节点。分析:考虑dp方程dp[i][j][0]表示以i为根节点、经过j个节点、不回到i、最小要走多远,dp[i][j][1]表示以i为根节点、经过j个节点、回到i、最小要走多远。容易想到状态转移方程dp[u][j][0] = min(dp[u][j][0],dp[u][j-k][1] + dp[v][k][0]
2016-09-05 11:39:25
306
原创 codeforces 374D 树状数组或者线段树
题意:给你n个操作,1,0,分别为在字符串上加上1,0。-1为删除再位置上ai的字符。分析:单点更新。考虑树状数组,不过这个题目和一般的不同,需要二分,而线段树本身在更新和查询操作的时候就是相当于二分。所以线段树更容易理解。具体详见代码:线段树#include #define lson l ,mid ,rt<<1#define rson mid+1,r,rt<<1|1usin
2016-08-20 14:38:28
384
原创 codeforces 703D 树状数组 + 离线处理 + 离散化
题意:给你m个操作,每个操作求区间[l,r]中偶数个元素的异或值。分析:根据异或的性质,偶数个的异或为0,所以我们考虑再一次元素本身,因此,偶数变成奇数,奇数变成偶数。具体详见代码:#includeusing namespace std;const int maxn = 1e6 +20;struct node{ int l,r,id;bool operator < (const
2016-08-20 14:33:32
385
原创 hdu 5862 树状数组 + 扫描线 + 离散化
题意:给你n条线段 ,求有多少个交点。分析:第一直觉就是扫描线,然后发现要用树状数组维护前缀和。因为坐标大但是点数小,所以考虑离散化。具体详见代码#include#include#include#includetypedef long long ll;using namespace std;const int maxn = 2e5 +20;ll BIT[maxn],X[max
2016-08-18 19:51:52
710
原创 codeforces 706D trie树 或 muliset
题意:插入,删除,询问三个操作。分析:显然trie树都支持这三个操作,但是代码比较长,用muliset更短小精悍。但是两者的本质都是一样,都是找与二进制不同的,尽量凑成全是1.muliset#includeusing namespace std;multiset dp;bool check(int a,int b){ auto it = dp.lower_bound(a);
2016-08-13 17:09:34
514
原创 poj1177 线段树 + 扫描线
题意:给出一些矩形,求其轮廓的周长。分析:不断的向线段树中添加边。具体的实现详见代码#include#include#include#include#define lson l , mid , rt<<1#define rson mid + 1, r , rt <<1 | 1using namespace std;const int maxn = 5e3 +20; cons
2016-08-12 19:23:27
307
原创 codeforces 706C 简单dp
题意:给你一些字符串,然后要把这些字符串变成字典序分析:因为决策只会有前面的字符影响,并且具有最优子结构(自己想想)具体实现详见代码。#includeusing namespace std;const long long INF = 3e18;const int maxn = 1e5 + 20;long long B[maxn] , dp[maxn][2];vector A;
2016-08-12 19:15:57
556
原创 poj 3667 线段树区间合并
题意:有很多房间,每次客人来住的时间要连续的房间,多次操作查询。分析:维护prefix和suffix数组来表示一段区间连续的个数具体实现详见代码:#include#include#include#include#define lson l , mid , rt << 1 #define rson mid + 1, r, rt << 1 | 1using namespac
2016-08-12 19:11:19
362
原创 poj2777 线段树
题意:给一些线段区间染色,然后问你一段区间的不同颜色的个数分析:因为颜色比较小 可以压缩为二进制表示细节详见代码#include#include#include#includeusing namespace std;#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1const int maxn = 1e5 + 20;st
2016-08-12 19:08:28
264
原创 poj 1195 二维树状数组(单点更新)
题意:在一个矩阵中做一些add和query操作 。 二维树状数组裸题矩阵sum(x1,y1,x2,y2) = sum(0,0,x2,y2) - sum(0,0,x1-1,y2, ) - sum(0,0,x2,y1-1) + sum(x1-1,y1-1); #include#include#include#include#define lson l,mid,rt
2016-08-12 19:00:25
323
原创 poj1177 线段树 + 扫描线
题意:给你一些矩形,求其周长。分析:通过扫描线,每次扫描到进去线段就现在线段树上加上这段线段,如果是出去的就删除就可以了。 分两次统计分别统计长和宽。具体实现详见代码。#include#include#include#include#define lson l , mid , rt<<1#define rson mid + 1, r , rt <<1 | 1using na
2016-08-12 18:46:55
339
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人