UOJ25——IOI2014Wall
1、题目大意:这道题也是线段树修改,有两种修改,一个区间中大于h都变成h,一个区间中小于h都变成h,单点询问
主要是这几种操作
2、分析:这道题是双标记,还是父亲的优先级比儿子低,自己用手推推就可以知道怎么下传标记了(挺好推得),这是一道交互题,
以前从来都没有做过交互题,做完顿时感觉交互和传统没有太大的区别。。。
#include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; struct segment_tree{ int milazy[10000000]; int malazy[10000000]; int x,y,z; int value[10000000]; void init(){ memset(value,0,sizeof(value)); for(int i=1;i<=8000000;i++)milazy[i]=214748364; memset(malazy,0,sizeof(malazy)); return; } void update(int l,int r,int o){ milazy[2*o]=min(milazy[2*o],milazy[o]);malazy[2*o]=min(malazy[2*o],milazy[o]); milazy[2*o+1]=min(milazy[2*o+1],milazy[o]);malazy[2*o+1]=min(malazy[2*o+1],milazy[o]); milazy[2*o]=max(milazy[2*o],malazy[o]);malazy[2*o]=max(malazy[2*o],malazy[o]); milazy[2*o+1]=max(milazy[2*o+1],malazy[o]);malazy[2*o+1]=max(malazy[2*o+1],malazy[o]); if(l==r){ value[l]=min(milazy[o],value[l]);value[l]=max(malazy[o],value[l]); } malazy[o]=0;milazy[o]=214748364; return; } void add_mi(int l,int r,int o){ update(l,r,o); if(x>r||y<l) return; if(x<=l&&r<=y){ milazy[o]=z;update(l,r,o); return; } int mid=(l+r)/2; add_mi(l,mid,2*o);add_mi(mid+1,r,2*o+1); return; } void add_ma(int l,int r,int o){ update(l,r,o); if(x>r||y<l)return; if(x<=l&&r<=y){ malazy[o]=z;update(l, r, o); return; } int mid=(l+r)/2; add_ma(l,mid,2*o);add_ma(mid+1,r,2*o+1); return; } int query(int l,int r,int o){ update(l,r,o); if(x>r||x<l)return 0; if(l==r&&l==x){ return value[l]; } int mid=(l+r)/2;int ret1,ret2; ret1=query(l,mid,2*o);ret2=query(mid+1,r,2*o+1); return max(ret1,ret2); } } wt; void buildWall(int n,int k,int op[],int left[],int right[],int height[],int finalHeight[]){ wt.init(); for(int i=0;i<k;i++){ if(op[i]==1){ wt.x=left[i]+1;wt.y=right[i]+1;wt.z=height[i]; wt.add_ma(1,n,1); } else{ wt.x=left[i]+1;wt.y=right[i]+1;wt.z=height[i]; wt.add_mi(1,n,1); } } for(int i=1;i<=n;i++){ wt.x=i; finalHeight[i-1]=wt.query(1,n,1); } return; }
UOJ25——IOI2014Wall的更多相关文章
随机推荐
- 理解和使用 JavaScript 中的回调函数
理解和使用 JavaScript 中的回调函数 标签: 回调函数指针js 2014-11-25 01:20 11506人阅读 评论(4) 收藏 举报 分类: JavaScript(4) 目录( ...
- IO多路复用及ThreadingTCPServer源码阅读
IO多路复用 socket模块是阻塞的,通过socket建立的服务端可以接收多个请求,但只能同时处理一个请求,其他请求都被阻塞.可以通过IO多路复用解决这个问题,socketserver内部使用的就是 ...
- Sublime Text3快捷键汇总
选择类 Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本. Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑.举个栗子:快速选中并更改所有相同的变量名.函数 ...
- Linux的95个小技巧
Linux的95个小技巧 by WEB全栈工程师 on 2012 年 03 月 27 日 这里总结了Linux使用中的一些小技巧 1.实现RedHat非正常关机的自动磁盘修复 先登录到服务器,然后在/ ...
- Java——不弹起的按钮组件:JToggleButton
import java.awt.GridLayout; import javax.swing.JFrame; import javax.swing.JToggleButton; //========= ...
- centos6.5编译安装git
1.下载高版本的git,地址:https://github.com/git/git/release,选择git-2.9.3.tar.gz 2.安装依赖包.解压.编译安装 yum install cur ...
- Unity Sprite Atlas Compression
http://forum.unity3d.com/threads/2d-sprite-packer-and-pvrtc.218633/ http://docs.unity3d.com/Manual/S ...
- WebApp基础01-设置读取assets目录下文件
要读取assets下的目录,只需要修改三个地方即可 1.res/layout/activity_main.xml 2.AndroidManifest.xml 3.src\com\example\lcy ...
- ServiceBase 备份
using CanDoo.Contracts; using CanDoo.Core.Data; using System; using System.Collections.Generic; usin ...
- Python之路【第七篇续】:I/O多路复用
回顾原生Socket 一.Socket起源: socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用[打开][读写][关闭]模式来操作. socket就是该模式的 ...