Codevs 题目1299 切水果 (线段树)
2015-08-31 15:36
323 查看
题目描述 Description
简单的说,一共N个水果排成一排,切M次,每次切[L,R]区间的所有水果(可能有的水果被重复切),每切完一次输出剩下水果数量
数据已重新装配,不会出现OLE错误
时限和数据范围适当修改,避免数据包过大而浪费空间资源
输入描述 Input Description
第1行共包括2个正整数,分别为N,M。
接下来m行每行两个正整数L,R
输出描述 Output Description
一共输出M行,每行输出切完之后剩下水果数量
样例输入 Sample Input
10 3
3 5
2 8
1 5
样例输出 Sample Output
7
3
2
数据范围及提示 Data Size & Hint
30%的数据满足N,M<=5,000
60%的数据满足N,M<=100,000
100% 的数据满足1<=L<=R<=N<=500,000,1<=M<=500,000
看了一眼感觉很水,就不想做了,一看就4%的人过了,感觉可能有坑不像我想的那么简单,就试了一下,提交就过了,,果然很水,。。。
ac代码
ac代码
简单的说,一共N个水果排成一排,切M次,每次切[L,R]区间的所有水果(可能有的水果被重复切),每切完一次输出剩下水果数量
数据已重新装配,不会出现OLE错误
时限和数据范围适当修改,避免数据包过大而浪费空间资源
输入描述 Input Description
第1行共包括2个正整数,分别为N,M。
接下来m行每行两个正整数L,R
输出描述 Output Description
一共输出M行,每行输出切完之后剩下水果数量
样例输入 Sample Input
10 3
3 5
2 8
1 5
样例输出 Sample Output
7
3
2
数据范围及提示 Data Size & Hint
30%的数据满足N,M<=5,000
60%的数据满足N,M<=100,000
100% 的数据满足1<=L<=R<=N<=500,000,1<=M<=500,000
看了一眼感觉很水,就不想做了,一看就4%的人过了,感觉可能有坑不像我想的那么简单,就试了一下,提交就过了,,果然很水,。。。
ac代码
评测ID: 1504764 用户名: 略懂_is_a_Joker 状态: 测试通过 Accepted 得分 : 100 总时间耗费: 2218ms 总内存耗费: 19 MB
测试点#cut1.in 结果:AC 内存使用量: 256kB 时间使用量: 1ms 测试点#cut10.in 结果:AC 内存使用量: 20456kB 时间使用量: 915ms 测试点#cut2.in 结果:AC 内存使用量: 364kB 时间使用量: 1ms 测试点#cut3.in 结果:AC 内存使用量: 488kB 时间使用量: 6ms 测试点#cut4.in 结果:AC 内存使用量: 3304kB 时间使用量: 2ms 测试点#cut5.in 结果:AC 内存使用量: 3432kB 时间使用量: 16ms 测试点#cut6.in 结果:AC 内存使用量: 4716kB 时间使用量: 136ms 测试点#cut7.in 结果:AC 内存使用量: 13292kB 时间使用量: 100ms 测试点#cut8.in 结果:AC 内存使用量: 13288kB 时间使用量: 101ms 测试点#cut9.in 结果:AC 内存使用量: 20456kB 时间使用量: 940ms
ac代码
#include<stdio.h> #include<string.h> struct s { int sum,flag,val; }node[500010<<2]; void pushup(int tr) { node.sum=node[tr<<1].sum+node[tr<<1|1].sum; } void build(int l,int r,int tr) { node .sum=r-l+1; node .flag=0; if(l==r) { return; } int mid=(l+r)>>1; build(l,mid,tr<<1); build(mid+1,r,tr<<1|1); } void pushdown(int tr,int m) { if(node .flag) { node[tr<<1].flag=1; node[tr<<1|1].flag=1; node[tr<<1].sum=0; node[tr<<1|1].sum=0; node .flag=0; } } void update(int L,int R,int l,int r,int tr) { if(L<=l&&r<=R) { node .sum=0; node .flag=1; return; } pushdown(tr,r-l+1); int mid=(l+r)>>1; if(L<=mid) update(L,R,l,mid,tr<<1); if(mid<R) update(L,R,mid+1,r,tr<<1|1); pushup(tr); } int main() { int n,m; while(scanf("%d%d",&n,&m)!=EOF) { build(1,n,1); while(m--) { int a,b; scanf("%d%d",&a,&b); if(a>b) { int t=a; a=b; b=t; } // printf("%d\n",node[1].sum); update(a,b,1,n,1); printf("%d\n",node[1].sum); } } } 相关文章推荐
- poj 1789 Truck History
- iOS---苹果支付串单完美解决方案
- 回归-梯度下降法
- spring监听器ContextLoaderListener的疑问
- 手机分辨率dp和px转换
- HDU1008 - Elevator (简单模拟)
- Java IO体系中常用的流分类
- 运行命令集锦
- CMU & Stanford 课程
- 内存管理
- [LeetCode]: 104: Maximum Depth of Binary Tree
- form表单,submit,ajax提交
- PHP中 array_map 与 array_column 之间的关系
- raspbian 配置AP热点
- Android Gradle配置自动生成JavaDoc
- 关于苹果的IDFA(广告识别符)政策
- ALTERA DE2 之 verilog HDL 学习笔记03 FPGA的PWM输出
- sqlplus64: error while loading shared libraries: libsqlplus.so 解决
- 图片选择jsp和png
- 逐梦路上,坚定信念