摘要: 我的思路是:把前两个数组枚举合并成一个大数组a,后两个数组枚举合并成一个大数组b,然后a数组从小到大排序,b数组从大到小排序,再循环压缩两个数组用c++交tle 囧 ,g++6672MS 囧View Code 1 //Accepted 49432K 6672MS G++ 1024B 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 #define MAX 4001 6 using namespace std; 7 int f[MAX][5],a[MAX*MAX],b[MAX*M 阅读全文
posted @ 2012-08-23 22:08 Wheat″ 阅读(129) 评论(0) 推荐(0)
摘要: 求区间最大值与最小值的差,最经典的是RMQ,线段树也能做,第一次写线段树,庆祝^_^线段树代码:View Code 1 //Accepted 1200K 2094MS C++ 1633B 2 #include <stdio.h> 3 #include <string.h> 4 5 #define lson l , m , rt << 1 6 #define rson m + 1 , r , rt << 1 | 1 7 const int maxn = 55555; 8 9 int st_min[maxn<<2],st_max[maxn 阅读全文
posted @ 2012-08-23 12:59 Wheat″ 阅读(150) 评论(0) 推荐(0)
摘要: 给定n个区间(l,r),问每个区间被多少个另外的区间所包含。包含的定义(l1,r1),(l2,r2),如果l1<=l2<r2<=r1&&(l1,r1)!=(l2,r2),则(l1,r1)包含(l2,r2)。用节点存储区间,然后给节点排序。l小的区间放在前面,l相同则r大的区间放在前面。为什么这样排序呢?因为对排序之后的节点,节点n只可能被排在它前面的(0--n-1)号节点包含,而不可能被后面的包含。那么(0--n-1)号节点中,又哪些能包含节点n呢?只要ri>=rn即可。(因为li<=ln的)。至于那部分怎么统计,用树状数组可以达到lgn的效率。V 阅读全文
posted @ 2012-08-23 10:52 Wheat″ 阅读(228) 评论(0) 推荐(0)