poj 1754 I Hate It 线段树
来源:互联网 发布:某路口车流量数据 编辑:程序博客网 时间:2024/06/10 23:11
Problem Description
很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。
这让很多学生很反感。
不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。
Input
本题目包含多组测试,请处理到文件结束。
在每个测试的第一行,有两个正整数 N 和 M ( 0
#include<cstdio>#include<cstring> #include<algorithm>using namespace std;#define maxn 1000000int a[maxn]; //保存值的数组 struct Node{ int left, right; //该节点维护的区间 int minvalue, maxvalue; //该节点保存的两个最值 }tree[4 * maxn];struct node{ int minans, maxans;}ans[maxn];void build_tree(int le, int ri, int root){ //参数是区间的左值和右值,从根节 = 1点开始建树 tree[root].left = le; tree[root].right = ri; int mid = (le + ri) / 2; if(le == ri){ tree[root].maxvalue = tree[root].minvalue = a[le]; return ; } build_tree(le, mid, root * 2); build_tree(mid + 1, ri, root * 2 + 1); tree[root].minvalue = min(tree[root * 2].minvalue, tree[root * 2 + 1].minvalue); tree[root].maxvalue = max(tree[root * 2].maxvalue, tree[root * 2 + 1].maxvalue);}int query(int le, int ri ,int root, int flag){ //falg是求最大值或者最小值的标志 if(tree[root].left == le && tree[root].right == ri){ if(flag == 0) return tree[root].minvalue; else return tree[root].maxvalue; } int mid = (le + ri) / 2; if(mid >= ri) return query(le, ri, root * 2, flag); else if(mid < le) return query(le, ri, root * 2 + 1, flag); else{ int valuele = query(le ,mid, root * 2, flag); int valueri = query(mid + 1, ri, root * 2 + 1, flag); if(flag == 0) return min(valuele, valueri); else return max(valuele, valueri); } } int main(){ int n,m; while(scanf("%d%d", &n, &m) != EOF){ for(int i = 1; i <= n; ++i) scanf("%d", &a[i]); build_tree(1, n, 1); for(int i = 1; i <= n - m + 1; ++i){ int j = i + m - 1; ans[i].minans = query(i,j,1,0); ans[i].maxans = query(i,j,1,1); } for(int i = 1; i < n - m + 1; ++i) printf("%d ",ans[i].minans); printf("%d\n",ans[n-m+1].minans); for(int i = 1; i < n - m + 1; ++i) printf("%d ", ans[i].maxans); printf("%d\n", ans[n-m+1].maxans); } return 0;}
阅读全文
0 0
- poj 1754 I Hate It 线段树
- POJ 1745 I HATE IT(线段树)
- poj 1754 I Hate It (线段树/分块)
- HDU 1754 I Hate It 线段树
- [hdu] 1754 I hate it -- 线段树
- hdu 1754 -- I Hate It (线段树)
- HDU 1754 I Hate It 线段树
- HDOJ 1754 I Hate It(线段树)
- 线段树 hdu 1754 I Hate It
- HDU 1754 I Hate It(线段树)
- hdu 1754 (线段树)I Hate It
- hdu-1754 I Hate It 线段树
- HDU--1754 -- I Hate It [线段树]
- 【线段树】hdu 1754 I hate it
- hdu - 1754 I Hate It(线段树)
- HDU--1754--I Hate It--线段树
- HDU-1754 I Hate It 线段树
- hdu 1754 I Hate It 线段树
- Python 剪刀石头布
- 车牌识别摄像机生产、检测过程
- 小程序踩坑
- 在ArcMap中内容列表的图层展示,图层顺序是怎么来的?
- Leetcode 134. Gas Station 解题报告
- poj 1754 I Hate It 线段树
- Longest Substring Without Repeating Characters
- 2018百度android方向校招编程题
- 3.字符串反转
- 输入两个整数n和m,从0-n中随意取几个数,使其和等于m
- 手势识别(业余知识 )2017/9/19
- 共享锁和排它锁
- 整数求和
- 迅雷前端笔试题