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[]统计从左端点起最长连续空房间 ...
随机推荐
- MHA的几种死法-叶良辰
master不通 找到最新slave 找到有所有其他slave缺失relay log的 slave 选主 配置文件指定 ...
- selenium+python笔记8
#!/usr/bin/env python # -*- coding: utf-8 -*- """ @desc: 定制浏览器 """ imp ...
- hdu---(1325)Is It A Tree?(并查集)
Is It A Tree? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- ARM中的总线
ARM中的总线用于不同部件之间的通信.有两种不同类型的设备连接到总线:ARM处理器,它是总线的主设备,拥有对总线的仲裁权,可以通过同一总线主动发起数据传输请求:外围器件,是总线的从设备,在总线上是被动 ...
- EasyUI DataGrid View
http://www.jeasyui.com/easyui/datagrid-detailview.js 前提一定要引入:datagrid-detailview.js主要是三个属性和普通的datgag ...
- 使用Astah繪製UML圖形(转)
http://www.dotblogs.com.tw/clark/archive/2015/02/12/149483.aspx
- MATLAB 随机生成互不重叠的多个矩形
建立m文件draw_rectangle.m. 其中p生成矩形的个数 function draw_rectangle(p) t = 1; x = rand(1)*10; y = rand(1)*10; ...
- FZU 2090 旅行社的烦恼 floyd 求无向图最小环
题目链接:旅行社的烦恼 题意是求无向图的最小环,如果有的话,输出个数,并且输出权值. 刚刚补了一发floyd 动态规划原理,用了滑动数组的思想.所以,这个题就是floyd思想的变形.在k从1到n的过程 ...
- <构建之法>之第一二三章的感悟
第一章 看了第一章,第一章主要是概论,主要讲述软件是什么,是由什么组成的,然后接着陈述软件工程是什么,看了第一章之后,得知,软件工程只是实现软件的一个工具,有了工具做事情才容易.还有进行运维和维护软件 ...
- 存储过程Oracle(一)
一.简介 存储过程:就是在数据库中创建的一段程序,供别人调用 .其实我感觉跟定义一个方法相似 二.无参存储过程 如下,经典的输出"Hello World"来入门存储过程 创建一个存 ...