poj3667 线段树 区间合并
//Accepted 3728 KB 1079 ms //线段树 区间合并 #include <cstdio> #include <cstring> #include <iostream> #include <queue> #include <cmath> #include <algorithm> using namespace std; /** * This is a documentation comment block * 如果有一天你坚持不下去了,就想想你为什么走到这儿! * @authr songt */ ; struct node { int l,r; int L1,R1; int sum1; int change; //change -1 区间没有改变 0区间变成0 1区间变成1 }f[imax_n*]; int max(int a,int b) { return a>b?a:b; } int min(int a,int b) { return a<b?a:b; } void swap(int &a,int &b) { int t=a; a=b; b=t; } void pushUp(int t) { *t].r-f[*t].l+; *t+].r-f[*t+].l+; f[t].L1=f[*t].L1; *t].L1==lLen) f[t].L1+=f[*t+].L1; f[t].R1=f[*t+].R1; *t+].R1==rLen) f[t].R1+=f[*t].R1; f[t].sum1=max(f[*t].sum1,f[*t+].sum1); f[t].sum1=max(f[t].sum1,f[*t].R1+f[*t+].L1); } void pushDown(int t) { ) { f[*t].change=f[t].change; f[*t+].change=f[t].change; f[t].change=-; f[*t].L1=f[*t].R1=f[*t].sum1=(f[*t].r-f[*t].l+)*f[*t].change; f[*t+].L1=f[*t+].R1=f[*t+].sum1=(f[*t+].r-f[*t+].l+)*f[*t+].change; } } void build(int t,int l,int r) { f[t].l=l; f[t].r=r; f[t].change=-; if (l==r) { f[t].L1=f[t].R1=f[t].sum1=; return ; } ; build(*t,l,mid); build(*t+,mid+,r); pushUp(t); } void update(int t,int l,int r,int c) { if (f[t].l==l && f[t].r==r) { f[t].change=c; f[t].L1=f[t].R1=f[t].sum1=f[t].change*(f[t].r-f[t].l+); return ; } pushDown(t); ; *t,l,r,c); else { *t+,l,r,c); else { update(*t,l,mid,c); update(*t+,mid+,r,c); } } pushUp(t); } int query(int t,int k) { //printf("f[%d].sum1=%d\n",t,f[t].sum1); if (f[t].l==f[t].r) { ; else return f[t].l; } pushDown(t); ; *t].sum1>=k) *t,k); *t].R1+f[*t+].L1>=k) *t].r-f[*t].R1+; *t+].sum1>=k) *t+,k); ; } int n,m; int op,x,y; void slove() { build(,,n); ;i<=m;i++) { scanf("%d",&op); ) { scanf("%d",&x); ,x); //printf("query=%d\n",t); ) printf("0\n"); else { printf("%d\n",t); update(,t,t+x-,); } } else { scanf("%d%d",&x,&y); update(,x,x+y-,); } } } int main() { while (scanf("%d%d",&n,&m)!=EOF) { slove(); } ; }
poj3667 线段树 区间合并的更多相关文章
- poj3667(线段树区间合并&区间查询)
题目链接: http://poj.org/problem?id=3667 题意:第一行输入 n, m表示有 n 间房间(连成一排的), 接下来有 m 行输入, 对于接下来的 m 行输入: 1 x : ...
- poj3667 Hotel (线段树 区间合并)
poj3667 HotelTime Limit: 3000MS Memory Limit: 65536KTotal Submissions: 18925 Accepted: 8242Descripti ...
- poj-3667(线段树区间合并)
题目链接:传送门 参考文章:传送门 思路:线段树区间合并问题,每次查询到满足线段树的区间最左值,然后更新线段树. #include<iostream> #include<cstdio ...
- POJ 3667 Hotel(线段树 区间合并)
Hotel 转载自:http://www.cnblogs.com/scau20110726/archive/2013/05/07/3065418.html [题目链接]Hotel [题目类型]线段树 ...
- HDU 3911 线段树区间合并、异或取反操作
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3911 线段树区间合并的题目,解释一下代码中声明数组的作用: m1是区间内连续1的最长长度,m0是区间内连续 ...
- HDU 3911 Black And White(线段树区间合并+lazy操作)
开始以为是水题,结果...... 给你一些只有两种颜色的石头,0为白色,1为黑色. 然后两个操作: 1 l r 将[ l , r ]内的颜色取反 0 l r 计算[ l , r ]内最长连续黑色石头的 ...
- HYSBZ 1858 线段树 区间合并
//Accepted 14560 KB 1532 ms //线段树 区间合并 /* 0 a b 把[a, b]区间内的所有数全变成0 1 a b 把[a, b]区间内的所有数全变成1 2 a b 把[ ...
- hdu3911 线段树 区间合并
//Accepted 3911 750MS 9872K //线段树 区间合并 #include <cstdio> #include <cstring> #include < ...
- 线段树(区间合并) POJ 3667 Hotel
题目传送门 /* 题意:输入 1 a:询问是不是有连续长度为a的空房间,有的话住进最左边 输入 2 a b:将[a,a+b-1]的房间清空 线段树(区间合并):lsum[]统计从左端点起最长连续空房间 ...
随机推荐
- SAP SD你要知道的透明表
一.客户主数据 基本数据放在KNA1里: 公司代码放在KNB1里: 销售视图放在KNVV里: 合作伙伴放在KNVP里: 二.信用主数据 KNKK里有信贷限额.应收总额.特别往来: S066里是未清订单 ...
- 如何增加Asp.Net Core生成的模板网站中用户信息表中的列(AspNetUsers)
环境: 1.VS2015 Community 14.0.25431.01 Update 3; 2.其他环境(具体哪一个影响不太清楚,都列在这儿) 使用的系统模板 利用系统提供的模板,并选择个人身份验证 ...
- IEnumerable接口的实现
对象要实现可以迭代需IEnumerable接口并实现GetEnumerator方法.一下简单例子 public class SPEnumerable<T> : IEnumerable { ...
- 【bzoj3160】【xsy1726】万径人踪灭
[bzoj3160]万径人踪灭 题意 给定一个由'a'和'b'构成的字符串,求不连续回文子序列的个数. \(n\leq 100000\) 分析 还是蛮不错的. 这道题基本上是自己想到的. 除了没有利用 ...
- 【转】commons-lang.jar包简介
转自:http://zhidao.baidu.com/share/71b48e6b3e1b1dc73fe705604b9c7584.html 1.下载jar包 包官方下载地址:http://commo ...
- web 页面内容优化管理与性能技巧
回想一下,以前我们不得不花费大量时间去优化页面内容(图片.CSS等等),如今用户有更快速的互联网链接,我们似乎能够使用更大的图像或更大的闪存文件,里面包含的有视频或者图片.然而,随着移动开发的兴起,我 ...
- 《Java程序设计》 实验一 实验报告
实验一 Java开发环境的熟悉(Windows + IDEA) 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 实验要求 1.完成 ...
- bug:C#线程间操作无效: 从不是创建控件" XX" 的线程访问它
今天遇到这个问题,百度了下,把解决的方法总结出来.我们在ui线程创建的子线程操作ui控件时,系统提示错误详细信息为:线程间操作无效: 从不是创建控件“XXX”的线程访问它. 就我知道的有三种方法,先看 ...
- lucene Lock obtain timed out: Lock@
出错界面: 解决办法: 出现以上异常主要有两种原因: 1.系统正在写索引未完成之前,应用程序关闭 解决方法:删除提示的lock文件后重启应用(最好在应用中捕捉到,自动删除) 2.系统中有多个线程或程序 ...
- MVC 特殊字符的显示
@(new HtmlString(HttpUtility.HtmlDecode(GPDetail.SimpleDescription)))