上一页 1 ··· 5 6 7 8 9
摘要: 分析 模拟一个伸展树的操作,最后中序遍历一下就可以。。 1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 #define N 1000010 6 #pragma comment(linker, "/STACK:102400000,102400000") 7 using namespace std; 8 int ch[N][2],pre[N],s[N],sz[N],num[N]; 9 bool rev[N]; 1 阅读全文
posted @ 2012-10-09 11:00 silver__bullet 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 题目描述 给定一个序列,询问某段区间内小于等于k的数的个数。分析 划分树+二分,二分的同时统计满足题意的数的个数。。 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #define N 100100 5 #define lson l,m,n<<1 6 #define rson m+1,r,n<<1|1 7 using namespace std; 8 int sorted[N],ans[N][20],num[N][20]; 9 void build(int 阅读全文
posted @ 2012-10-08 19:42 silver__bullet 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 分析 LCA,只不过多了图不连通的情形,用Tarjan离线处理,用visited[i]的值来表示i属于哪个集合.. 1 #include<cstdio> 2 #include<cstring> 3 #include<vector> 4 #include<algorithm> 5 #include<iostream> 6 #define N 10010 7 using namespace std; 8 int root[N],dis[N],n,m,k,ans[N*100]; 9 int visited[N],cnt;10 struct 阅读全文
posted @ 2012-09-15 00:06 silver__bullet 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 分析 二维RMQ,maxn[i][j][a][b]表示以(i,j)为左上顶点,以(i+2^a-1,j+2^b-1)为右下顶点的矩形内的最大值,minn数组同理... 1 #include<iostream> 2 #include<algorithm> 3 #include<cstdio> 4 #define N 260 5 #define M 9 6 using namespace std; 7 int maxn[N][N][M][M],minn[N][N][M][M]; 8 int n,b,k; 9 void init(){10 for(int a=0;( 阅读全文
posted @ 2012-09-15 00:01 silver__bullet 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 分析 并查集,需要维护集合内元素与根节点的关系(吃?被吃?同类) 有点类似向量的想法 如果x y属于同一集合 如果x y不属于同一集合 dis[x]=0表示x与根节点同类,1表示根节点吃x,2表示x吃根节点. 1 #include<cstdio> 2 #include<cstring> 3 #define N 50010 4 using namespace std; 5 int root[N],dis[N],n,m; 6 void init(){ 7 for(int i=1;i<=n;i++){ 8 root[i]=i; 9 dis... 阅读全文
posted @ 2012-09-10 22:39 silver__bullet 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 【题目描述】给定一排连续的房间,有两个操作:1--找到一排连续尽可能靠左的n个房间,入住房间,并输出最左的房间号,如果不存在输出0;2--清空某个区间内房间的人 。【分析】非常非常经典的一道题。ps.前两天做的这题,当时想了半天没有想好怎么去维护,后来依靠题解磕磕绊绊的过了这题。结果今天写题解的时候还是没有马上想到思路,有空重新做一次这题。s[n][0]表示以区间左端点开始的连续空房间个数s[n][1]表示以区间右端点结束的连续空房间个数s[n][2]表示整个区间的连续空房间个数s[n][3]为懒惰标记。注意询问的时候要输出满足条件的最左的房间号,所以注意下判断的次序即可。#include&l 阅读全文
posted @ 2012-08-01 23:20 silver__bullet 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 【题目描述】给定一个序列a1...an,每次可以吧第一个元素放到最后形成一个新的序列,求解这n个序列中逆序数最小的一个。【思路】线段树的应用——利用线段树求解逆序数。一组逆序对ai,aj满足ai>aj&&i<j,求解时先进行排序,找出没个数的相对大小。插入的时候从最后一个开始向前一次插入,每次将x[i]插入到k时。询问1...k这段中已插入的个数。因为1...k这段中已插入的个数即为排在x[i]之后并且比x[i]小的数的个数,即为包含x[i]的逆序对总数。求出原序列的逆序对数之后,每次变更之后的逆序数可以提出来。#include<cstdio>#incl 阅读全文
posted @ 2012-07-03 23:25 silver__bullet 阅读(124) 评论(0) 推荐(0) 编辑
上一页 1 ··· 5 6 7 8 9