11 2012 档案
摘要:只要明白下区间如何更新上区间就可以了,左区间和右区间中只能、可能是右区间右边界中有'w',然后右区间左边界有'b''w',或者是右区间左边界有'w',左区间右边界有'w''b',满足这个情况下面,才可能上面的区间wbw组合增多。所以只要明白这个就ok了。。。View Code 1 #include<iostream> 2 #include<stdio.h> 3 using namespace std; 4 const int N = 50005; 5 int cover[N&
阅读全文
摘要:既然这道题目要我们维护出现在%5=3位置上面的值,那么我现在想想是不是这个线段区间上面只可能有5种状态的线段树出现。那么我就只用维护这五种状态,最后只用看3状态上面的数字之和为多少就ok了。。当然还是要来一个离线处理,因为你现在必须知道对于这一整组数据而言要建立多大的一颗线段树。View Code 1 #include<iostream> 2 #include<algorithm> 3 #include<cstdio> 4 #include<string.h> 5 #define LL __int64 6 using std::unique; 7
阅读全文
摘要:其实这道题真的告诉了我一个道理,那就是仔细看题,题目中明确说出了1就是所有子树的根结点。我们可以想一想,现在每个结点代表着一段区间的询问,所以我们必须利用深搜的时间戳来找出所有结点所代表的区间。前向星见图自然不可少。更新区间的话,我们必须用离线处理,[i,j]这个区间代表着第i个数在这个区内出现k次的数的个数。View Code 1 #include<algorithm> 2 #include<iostream> 3 #include<string.h> 4 #include<cstdio> 5 #include<vector> 6
阅读全文
摘要:一开始接触到这道题目的时候就有了思路,应该是之前做线段树出来的结果吧,不过这个更新真的想了很久。把其中的红、绿、蓝以1、2、4来代替,那么通过位运算就能将其他的颜色状态都演化出来。代码部分就更新部分最精华,这还是参考的网上的某位大哥的神作而得来的。。View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<string.h> 5 #include<stdlib.h> 6 #define LL __int64 7 using st
阅读全文
摘要:View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<string.h> 5 #define LL long long 6 using std::sort; 7 const int N = 100005; 8 struct Order 9 {10 int l,r,id;11 bool operator <(const Order & tmp)const12 {13 return r<tmp.r;14 }15 }ord
阅读全文
摘要:开始看到这道题目的时候,神题啊。。 想了一个下午,没思路。。。后面到网上一看这位大哥的解说,豁然开朗http://blog.csdn.net/gotoac/article/details/7588254每个区间分割多边形是可能是三角形或者梯形或者四边形,都是上底+下底乘高除2,这个小学就会的东西,看来现在还是不能够活用的啊。。。。View Code 1 #include<iostream> 2 #include<stdlib.h> 3 #include<cstdio> 4 #include<algorithm> 5 using std::swap
阅读全文
摘要:仔细分析的话,不用说了,我只是尽自己的力量去写一个尽量好看的代码。。。思路说一下: 就是先统计这个点的上区间有多少点,下区间有多少点,然后x排序再求上下区间,这个时候便可以得知已经更新进去的点一定在该点的左下方、左上方、下方。。。 由此统计出每个点被作为标准点画出,每个人的得分情况。。View Code 1 #include<iostream> 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<algorithm> 5 #include<string.h> 6 using name
阅读全文
摘要:刚刚敲完空间体积相交,但是这道题竟然一开始没有思路,果然还是该打,总结线段树的做题经验就是要仔细看数据的范围。解题思路:因为每一种植物的价值最大不过到100,那么我们需要的价值就是面积*价值,那么我们何不把价值作为第三个坐标轴z轴栏运算呢~ 接下来不说了,,看代码View Code 1 #include<iostream> 2 #include<stdio.h> 3 #include<algorithm> 4 #include<string.h> 5 using std::unique; 6 using std::sort; 7 const in
阅读全文
摘要:解题思路: 一开始看题完全没思路,本来以为要建一个三维的线段树,以为暂时不能够动了,但是之后忍不住了,看了解题报告,原来是枚举z轴上面的值就可以了,这样猥琐过都可以。。。看来还是自己观察数据不够到位。。。 然后针对每一层z轴,建立一个线段树,对覆盖三次以上的面积求和,然后再求体积。。。View Code 1 #include<iostream> 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<algorithm> 5 #include<string.h> 6 using std:
阅读全文
摘要:感觉学过背包的话应该就很容易做了,优先级人数最多,时间最少,那么泡到n个妹妹就有相应的最少时间,所以要开一个数组存储该人数下时间最小。。。仅此。。。View Code 1 #include<iostream> 2 #include<stdio.h> 3 #include<stdlib.h> 4 using namespace std; 5 const int INF=1000000; 6 const int N = 1002; 7 int rmb[N],rp[N],tim[N]; 8 int dp[N][120][120],num[N]; 9 int Min
阅读全文
摘要:刚刚看到二维线段树,吓到了,,还以为很难的类。。 刚刚入门的话,其实很简单的啦,之后就不知道了。其实就是在原来的一维线段树上面再建立一维就ok了。。。 但是我在想的是 现在是因为数据不够大,要是大了怎么办,哎,还没做到那样的题,先不管了因为每个节点都只用记录最大值。。 仔细看代码吧。。 我已经尽力调到好看了。。。View Code 1 #include<stdio.h> 2 #include<iostream> 3 #include<algorithm> 4 #include<string.h> 5 #include<stdlib.h>
阅读全文

浙公网安备 33010602011771号