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的更多相关文章
随机推荐
- Django admin美化插件suit
Django Suit 效果 使用前django页面 使用后django页面 安装 官方文档 http://django-suit.readthedocs.io/en/develop/index.ht ...
- C#编写滤镜 图片色调取反效果(Invert)
转自:http://www.it165.net/pro/html/201208/3469.html Invert 英文叫做颠倒.. 原理很简单也就是 将 255- 原本的值.. 这样 0(黑) 就会变 ...
- Cross-Site Scripting(XSS)简介
最近才开始研究HTML以及安全问题.如果有什么说得不对的地方,望请指出. 在网络应用安全中,XSS可能是最常见,范围最大,所包含攻击方法最多,同时也是最难以理解的一种攻击.在OWASP所列出的十大网络 ...
- re正则表达式7_{}
curly brackets {} instead of one number, you can specify a range by writing a minimum,a comma,and a ...
- Deep Learning in a Nutshell: History and Training
Deep Learning in a Nutshell: History and Training This series of blog posts aims to provide an intui ...
- 解决 linux下编译make文件报错“/bin/bash^M: 坏的解释器:没有那个文件或目录” 问题
PS背景:我在公司做sdk 的pc端开发,所以经常会在win下编译通过之后跑到linux下再运行一次已确保能支持多平台. 今儿在win下跑完一程序,然后放到linux下跑的时候,我用指令: [plai ...
- 关于MarshalByRefObject的解释
http://www.cnblogs.com/webfpc/archive/2010/03/10/1667101.html 首先了解一下不同应用程序域中的对象的通信方式有两种: 一种是跨应用程序域边界 ...
- Java Servlet系列之Servlet生命周期
Servlet生命周期定义了一个Servlet如何被加载.初始化,以及它怎样接收请求.响应请求,提供服务.在讨论Servlet生命周期之前,先让我们来看一下这几个方法: 1. init()方法 在Se ...
- Python之路【第三篇补充】:Python基础(三)
参考老师:http://www.cnblogs.com/wupeiqi lambda表达式 学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即: # 普通条件语句 if 1 ...
- PHP数组处理函数的使用array_push(一)
使用PHP做数据处理时会涉及到大量的数组操作,这里我就记下各种数组处理函数的使用方法,好记性不如烂笔头!! 一.array_push的使用方法:将一个或多个单元压入数组的末尾(入栈) 说明:int a ...