hdu_4417_Super Mario_TLE
来源:互联网 发布:零基础学qt4编程pdf 编辑:程序博客网 时间:2024/06/15 17:18
#include<iostream>#include<cstdio>#include<sstream> #include<string> #include<vector> #include<list> #include<set> #include<map> #include<stack> #include<queue> #include<algorithm> #include<cmath> #pragma warning(disable:4996) using std::cin;using std::cout;using std::endl;using std::stringstream;using std::string;using std::vector;using std::list;using std::pair;using std::set;using std::multiset;using std::map;using std::multimap;using std::stack;using std::queue;template<typename ElemType>class Interval{public:ElemType first, second, ceil,floor;Interval(){first = second = ceil =floor= 0;}Interval(const ElemType &f, const ElemType &s){first = f;second = s;ceil = floor=0;}Interval(const pair<ElemType, ElemType>&p){first = p.first;second = p.second;ceil = floor=0;}ElemType mid(){return first + (length() - 1) / 2;}ElemType length(){return second - first + 1;}};template<typename ElemType>class SegTree{private:vector<Interval<ElemType> >tree;public:SegTree() {}SegTree(const ElemType &n){tree.resize(4 * n);}int size(){return tree.size();}void resize(const ElemType &n){tree.resize(n);}void update_parent(const int &parent){tree[parent].ceil = std::max(tree[parent * 2].ceil, tree[parent * 2 + 1].ceil);tree[parent].floor = std::min(tree[parent * 2].floor, tree[parent * 2 + 1].floor);}//以数组形式建立线段树,当数据离散化之后,调用build(min,max,1)void build(Interval<ElemType>interval, ElemType parent, ElemType &size){tree[parent] = interval;if (interval.first == interval.second){scanf("%d", &tree[parent].ceil);tree[parent].floor = tree[parent].ceil;size = std::max(size, parent);return;//当为元线段时停止递归}ElemType mid = (interval.first + interval.second) / 2;build({ interval.first,mid }, 2 * parent, size);build({ mid + 1,interval.second }, 2 * parent + 1, size);update_parent(parent);}int getBrick(Interval<ElemType>interval, ElemType parent, const ElemType &height){if (tree[parent].first == interval.first&&interval.second == tree[parent].second){if (height >= tree[parent].ceil){return tree[parent].length();}if (height < tree[parent].floor){return 0;}if (tree[parent].length() == 1){return 0;}}ElemType mid = tree[parent].mid();if (interval.second <= mid){return getBrick(interval, parent * 2, height);}else if (interval.first > mid){return getBrick(interval, parent * 2 + 1, height);}else{return getBrick({ interval.first,mid }, parent * 2, height) + getBrick({ mid + 1,interval.second }, parent * 2 + 1, height);}}};int main(){//freopen("input.txt", "r", stdin);//freopen("output.txt","w",stdout); int T,count=0; cin >> T;while (T--){int n, m,size=0; scanf("%d%d", &n, &m);SegTree<int>segtree(n);segtree.build({ 1,n }, 1,size);segtree.resize(size + 1);printf("Case %d:\n",++count);while (m--){int left, right, height; scanf("%d%d%d", &left, &right,&height);printf("%d\n", segtree.getBrick({ left + 1,right + 1 }, 1, height));}}return 0;}
0 0
- hdu_4417_Super Mario_TLE
- hdu_4417_Super Mario
- 国内外智能电网发展分析
- 持续交付目录
- Redis的高级应用
- 题目1436:Repair the Wall
- 数据结构与算法学习记录
- hdu_4417_Super Mario_TLE
- android shape的使用
- 51say weekend keyword scholl district house
- Mybaits学习过程中出现的错误
- leetcode 242. Valid Anagram
- Largest Rectangle in Histogram
- recycleview学习02
- 静态函数库和动态函数库的制作
- 进程的地址空间与函数调用过程