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的更多相关文章
随机推荐
- Navicat 的使用(一)
1.创建连接 主机名 : 可以不写名称随意 主机名/IP地址:localhost或者127.0.0.1 都是本机的意思 端口:默认3306 尽量不要改怕与其余端口重复,如有重名端口系统会报错 用户 ...
- Mysql事务,并发问题,锁机制
.什么是事务 事务是一条或多条数据库操作语句的组合,具备ACID,4个特点. 原子性:要不全部成功,要不全部撤销 隔离性:事务之间相互独立,互不干扰 一致性:数据库正确地改变状态后,数据库的一致性约束 ...
- 爬虫4 html输出器 html_outputer.py
#coding:utf8 __author__ = 'wang' class HtmlOutputer(object): def __init__(self): self.datas = []; de ...
- Flask-WTF form doesn't have attribute 'validate_on_submit'问题
今天在学习WTF表单的时候遇到了这个问题,在stackoverflow上搜索查到了解决方案 from flask.ext.wtf import Form from wtforms import Tex ...
- HTML学习笔记——frameset和marquee
1>frameset 效果如百Google度 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...
- CentOS下crond定时任务详细介绍
目录 1.定时任务crond介绍... 2.crond定时任务限权... 3.Crontab用法... 4.Crontab命令的书写格式... 5.定时服务器时间同步... 6.写定时任务注意点.. ...
- JS实现表格排序
今天有点闲,写个小东西,使用JS实现点击表格标题栏实现自动排序功能,嘻嘻... 一.JS代码,文件名为code.js如下: (function($){ //插件 $.extend($,{ //命名空间 ...
- Winsock 入门 计算校验和 示例
#include <stdio.h> #include <string.h> #define DATA_MAX_LEN 14 /* 最大数据长度 */ struct data_ ...
- Java常见的几种内存溢出及解决方法
Java常见的几种内存溢出及解决方法[情况一]:java.lang.OutOfMemoryError:Javaheapspace:这种是java堆内存不够,一个原因是真不够(如递归的层数太多等),另一 ...
- Unlink of file '.git/objects/pack/pack-***.pack' failed. Should I try again? (y/n) (转)
git pull的时候遇到 Unlink of file '.git/objects/pack/pack-***.pack' failed. Should I try again? (y/n) y 于 ...