HDU 4614 Vases and Flowers (2013多校第二场线段树)
题意摘自:http://blog.csdn.net/kdqzzxxcc/article/details/9474169 ORZZ
题意:给你N个花瓶,编号是0 到 N - 1 ,初始状态花瓶是空的,每个花瓶最多插一朵花。
然后有2个操作。
操作1,a b c ,往在a位置后面(包括a)插b朵花,输出插入的首位置和末位置。
操作2,a b ,输出区间[a , b ]范围内的花的数量,然后全部清空。
很显然这是一道线段树。区间更新,区间求和,这些基本的操作线段树都可以logN的时间范围内完成。
操作2,很显然就是线段树的区间求和,求出[a , b]范围内的花朵的数量,区间更新,将整个区间全部变成0。
操作1,这里我们首先需要找出他的首位置和末位置,所以需要二分他的位置。
首先我们二分他的首位置, l = a , r = n ,在这个区间内二分,找出第一个0的位置,那就是该操作的首位置pos1。
然后再二分他的末位置,l = pos1 , r = n ,找到第c个0,就是该操作的末位置pos2,然后区间更新[pos1 ,pos2]全部置为1。
tmp = n - minn + 1 - query(minn,n,1) ; 表示【minn,n】区间内空花瓶的个数,如果需要插的花束多余tmp,则只能插tmp束花。
这题重点在于二分找位置,找了半天终于在别人的帮助下调试出来了............
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <vector>
#include <set>
#include <queue>
#include <stack>
#include <climits>//形如INT_MAX一类的
#define MAX 100050
#define INF 0x7FFFFFFF
#define REP(i,s,t) for(int i=(s);i<=(t);++i)
#define ll long long
#define mem(a,b) memset(a,b,sizeof(a))
#define mp(a,b) make_pair(a,b)
#define L(x) x<<1
#define R(x) x<<1|1
# define eps 1e-5
//#pragma comment(linker, "/STACK:36777216") ///传说中的外挂
using namespace std; struct node {
int r,l,mid;
int lazy,sum;
} edge[4*MAX]; void up(int num) {
edge[num].sum = edge[L(num)].sum + edge[R(num)].sum;
} void build(int l,int r,int num) {
edge[num].l = l;
edge[num].r = r;
edge[num].mid = (l+r) >> 1;
edge[num].lazy = -1;
if(l == r) {
edge[num].sum = 0;
return ;
}
build(l,edge[num].mid,L(num));
build(edge[num].mid+1,r,R(num));
//
up(num);
} void down(int num) {
//if(edge[num].l == edge[num].r) return ;
if(edge[num].lazy != -1) {
edge[L(num)].lazy = edge[num].lazy;
edge[R(num)].lazy = edge[num].lazy;
edge[L(num)].sum = (edge[L(num)].r - edge[L(num)].l + 1) * edge[num].lazy;
edge[R(num)].sum = (edge[R(num)].r - edge[R(num)].l + 1) * edge[num].lazy;
edge[num].lazy = -1;
} } void update(int l,int r,int num,int k) {
if(l == edge[num].l && r == edge[num].r) {
edge[num].lazy = k;
edge[num].sum = (edge[num].r - edge[num].l + 1) * k;
return ;
}
down(num);
if(r <= edge[num].mid) {
update(l,r,L(num),k);
} else if(l > edge[num].mid) {
update(l,r,R(num),k);
} else {
update(l,edge[num].mid,L(num),k);
update(edge[num].mid + 1,r,R(num),k);
}
up(num);
} int query(int l,int r,int num) {
if(l == edge[num].l && r == edge[num].r) {
return edge[num].sum;
}
down(num);
if(r <= edge[num].mid) {
return query(l,r,L(num));
} else if(l > edge[num].mid) {
return query(l,r,R(num));
} else {
return query(l,edge[num].mid,L(num)) + query(edge[num].mid + 1,r,R(num));
}
} void test(int n) {
for(int i=1; i<=3*n; i++) {
printf("l:%d r:%d sum:%d lazy:%d\n",edge[i].l,edge[i].r,edge[i].sum,edge[i].lazy);
}
}
int main() { int n,m,i,t;
cin >> t;
while(t --) {
scanf("%d%d",&n,&m);
int a,b,c;
build(1,n,1);
for(i=0; i<m; i++) {
scanf("%d%d%d",&a,&b,&c);
if(a == 1) {
int low = b + 1,high = n,mid,minn = 2*n;
if(n - low + 1 - query(low , n , 1) == 0) {
printf("Can not put any one.\n");
continue;
}
while(low <= high) {
mid = (low + high) >> 1;
if(mid - (b + 1) + 1- query(b+1,mid,1) >= 1) {
minn = min(minn,mid);
high = mid - 1;
} else {
low = mid + 1;
}
}
int tmp = n - minn + 1 - query(minn,n,1) ;
if(c >= tmp) c = tmp; ·
low = minn,high = n;
int maxx = INF;
while(low <= high) {
mid = (low + high) >> 1;
tmp = mid - minn + 1 - query(minn,mid,1) ;
if(tmp == c) {
maxx = min(maxx,mid);
high = mid - 1;
} else if(tmp > c) {
high = mid - 1;
} else {
low = mid + 1;
}
}
printf("%d %d\n",minn-1,maxx-1);
update(minn,maxx,1,1); } else {
printf("%d\n",query(b+1,c+1,1));
update(b+1,c+1,1,0);
}
}
puts("");
}
return 0;
}
HDU 4614 Vases and Flowers (2013多校第二场线段树)的更多相关文章
- HDU 4614 Vases and Flowers (2013多校2 1004 线段树)
Vases and Flowers Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others ...
- HDU6602 Longest Subarray hdu多校第二场 线段树
HDU6602 Longest Subarray 线段树 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6602 题意: 给你一段区间,让你求最长的区间使 ...
- HDU 4620 Fruit Ninja Extreme(2013多校第二场 剪枝搜索)
这题官方结题报告一直在强调不难,只要注意剪枝就行. 这题剪枝就是生命....没有最优化剪枝就跪了:如果当前连续切割数加上剩余的所有切割数没有现存的最优解多的话,不需要继续搜索了 #include &l ...
- HDU 4614 Vases and Flowers(线段树+二分)
Vases and Flowers Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others ...
- hdu 4614 Vases and Flowers
http://acm.hdu.edu.cn/showproblem.php?pid=4614 直接线段树维护 代码: #include<iostream> #include<cstd ...
- HDU 4614 Vases and Flowers(二分+线段树区间查询修改)
描述Alice is so popular that she can receive many flowers everyday. She has N vases numbered from 0 to ...
- HDU 4614 Vases and Flowers(线段树+记录区间始末点或乱搞)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4614 题目大意:有n个空花瓶,有两种操作: 操作①:给出两个数字A,B,表示从第A个花瓶开始插花,插B ...
- hdu 4614 Vases and Flowers(线段树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4614 题意: 给你N个花瓶,编号是0 到 N - 1 ,初始状态花瓶是空的,每个花瓶最多插一朵花. ...
- HDU 4614 Vases and Flowers(线段树+二分)
题目链接 比赛的时候一直想用树状数组,但是树状数组区间更新之后,功能有局限性.线段树中的lz标记很强大,这个题的题意也挺纠结的. k = 1时,从a开始,插b个花,输出第一个插的位置,最后一个的位置, ...
随机推荐
- Kafka的Producer以及Consumer远程调用问题
公司需要分布式的JMS,所以研究了Kafka,之前在本地都没有出现问题,但是在服务器上布Kafka的时候发现了消费者无法消费的问题. kafka布到一台服务器上面,由于业务原因,producer和ka ...
- java并发编程--Executor框架(一)
摘要: Eexecutor作为灵活且强大的异步执行框架,其支持多种不同类型的任务执行策略,提供了一种标准的方法将任务的提交过程和执行过程解耦开发,基于生产者-消费者模式,其提交任务的线程 ...
- Fabricate equation(dfs + 模拟)
Fabricate equation Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Other ...
- VS2008找不到MFC90d.dll错误解决方法
问题是在更新嵌入的清单文件时发生的,由于FAT32的原因而未能更新嵌入的清单文件,于是我们有如下两种解决方法: (1)不启用增量链接.在项目的“属性|配置属性|链接器|常规”中的“启用增量链接”选择“ ...
- iOS之Swift语言的学习
好久都没有来这个熟悉而又陌生的地方啦, 想想已经有两三个月了吧,不过我相信以后还是会经常来的啦,因为忙碌的学习已经过去啦,剩下的就是要好好的总结好好的复习了,好好的熟悉下我们之前学习的知识点,将他们有 ...
- springmvc访问路径传递参数
@RequestMapping(value = "/{path}/toList") public String toList(@PathVariable String path) ...
- solr热身
入博客园快满一年,居然没写一篇博客,好惭愧. 公司的搜索系统需要从Lucene.net(更新相当不给力)换成solr了,最近一直在学习solr,相关资料是相当的少啊,特别是还要在.net环境下开发.准 ...
- ssh localhost无密码登录设置
亲测... ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys ...
- mysql列名不能输入中文 解决办法
以前安装了mysql,今天下午做了个练习,每次列名为中文时总是报错.查资料显示说需要修改配置文件my.ini 我的路径是:C:\Program Files\MySQL\MySQL Server 5.5 ...
- codeforces 339C Xenia and Weights(dp或暴搜)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Xenia and Weights Xenia has a set of weig ...