HDU 1556 前缀和 树状数组 线段树
解法一:
a[i]表示以 i作为起点,对 i-n的气球全部上色的次数
对(start,end)区间上色
++a[start]
--a[end+1]抵消掉 end+1-n的部分
问题转换为求 a的前缀和
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+6;
int n,a[maxn];
int main()
{while(scanf("%d",&n)&&n){memset(a,0,sizeof(a));for(int i=1;i<=n;i++){int l,r;scanf("%d%d",&l,&r);++a[l];--a[r+1]; }for(int i=1;i<=n+1;i++)printf("%d:%d\n",i,a[i]); printf("%d",a[1]);for(int i=2;i<=n;i++){a[i]+=a[i-1];printf(" %d",a[i]);}printf("\n");} return 0;
}
解法二:
树状数组
#include<bits/stdc++.h>
using namespace std;
int N,c[100005];
int lowbit(int i)
{return i&(-i);}
void add(int i,int value)
{while(i<=N){c[i]+=value;i+=lowbit(i);}
}
int sum(int i){int sum=0;while(i>0){sum+=c[i];i-=lowbit(i);}return sum;
}
int main()
{while(scanf("%d",&N)!=EOF&&N){int a,b;memset(c,0,sizeof(c));for(int i=1;i<=N;i++){scanf("%d%d",&a,&b);add(a,1);add(b+1,-1);}for(int i=1;i<N;i++)printf("%d ",sum(i));printf("%d\n",sum(N));}return 0; }
解法三:
线段树
更新区间,查询点
#include<stdio.h>
#include<string.h>#define lson l ,mid ,t << 1
#define rson mid + 1 ,r ,t << 1 | 1__int64 sum[440000] ,mark[440000];void Pushup(int t)
{sum[t] = sum[t<<1] + sum[t<<1|1];
}void Pushdown(int t ,int ll)
{if(mark[t]){mark[t<<1] += mark[t];mark[t<<1|1] += mark[t];sum[t<<1] += (ll - (ll >> 1)) * mark[t];sum[t<<1|1] += (ll >> 1) * mark[t];mark[t] = 0;}
}void BuidTree()
{memset(sum ,0 ,sizeof(sum));memset(mark ,0 ,sizeof(mark));
}void Update(int l ,int r ,int t ,int a ,int b ,int c)
{if(a <= l && b >= r){sum[t] += (r - l + 1) * c;mark[t] += c;return;}Pushdown(t ,r - l + 1);int mid = (l + r) >> 1;if(a <= mid) Update(lson ,a ,b ,c);if(b > mid) Update(rson ,a ,b ,c);Pushup(t);
}__int64 Query(int l ,int r ,int t ,int a ,int b)
{if(a <= l && b >= r)return sum[t];Pushdown(t ,r - l + 1);int mid = (l + r) >> 1;__int64 ans = 0;if(a <= mid) ans = Query(lson ,a ,b);if(b > mid) ans += Query(rson ,a ,b);return ans;
}int main ()
{int n ,a ,b ,i;while(~scanf("%d" ,&n) && n){BuidTree();for(i = 1 ;i <= n ;i ++){scanf("%d %d" ,&a ,&b);Update(1 ,n ,1 ,a ,b ,1);}for(i = 1 ;i <= n ;i ++)if(i == n) printf("%I64d\n" ,Query(1 ,n ,1 ,i ,i));else printf("%I64d " ,Query(1 ,n ,1 ,i ,i));}return 0;
}
HDU 1556 前缀和 树状数组 线段树相关推荐
- D-query SPOJ - DQUERY(求区间不同数的个数)(树状数组||线段树+离散)(主席树+在线)
English Vietnamese Given a sequence of n numbers a1, a2, -, an and a number of d-queries. A d-query ...
- P2357 守墓人(树状数组/线段树)
题目描述 在一个荒凉的墓地上 有一个令人尊敬的守墓人, 他看守的墓地从来 没有被盗过, 所以人们很放心的把自己的先人的墓 安顿在他那 守墓人能看好这片墓地是必然而不是偶然..... 因为....守墓人 ...
- E. Tyler and Strings(组合计数 + 树状数组/线段树)(带重复元素的全排列)
题目链接 主要思路还是比较好想的,一些细节公式预处理比较难搞- 参考题解 分析 从前往后遍历,如果s[]剩下的数中,s[i] < t[i]则对答案是有贡献的: 贡献就是后面位置[i+1 ~ n] ...
- NKOJ 2182 (HEOI 2012) 采花(树状数组/线段树)
P2182[河北OI 2012 DAY1]采花 问题描述 萧芸斓是Z 国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳 了n 朵花,花有c ...
- jzoj3854-分组【树状数组,线段树】
正题 题目链接:https://jzoj.net/senior/#contest/show/2990/2 题目大意 一个小队满足要求 队长的地位最高 所有队员和队长的年龄差不超过kkk 给出nnn个人 ...
- 模板三连击:树状数组+线段树+主席树
没事儿干,复习模板...... 1.树状数组 本来不想写这个的,但是反正就几分钟就打完了,所以就写了,水AC数. 洛谷 P3374 [模板]树状数组 1 1 #include<cstdio> ...
- 51nod 1680区间求和 (dp+树状数组/线段树)
不妨考虑已知一个区间[l,r]的k=1.k=2....k=r-l+1这些数的答案ans(只是这一个区间,不包含子区间) 那么如果加入一个新的数字a[i](i = r+1) 则新区间[l, i]的答案为 ...
- CCF201709-5 除法(100分)【树状数组+线段树】
试题编号: 201709-5 试题名称: 除法 时间限制: 10.0s 内存限制: 256.0MB 问题描述: 问题描述 小葱喜欢除法,所以他给了你N个数a1, a2, ⋯, aN,并且希望你执行M次 ...
- POJ2182 HDU2711 Lost Cows【树状数组+线段树】
Lost Cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 17113 Accepted: 10664 Descripti ...
最新文章
- 大厂技术文档:Redis+Nginx+Spring全家桶+Dubbo精选
- Linux学习之系统编程篇:IPC 和管道的基本概念及管道的创建
- ProtoBuff3.0.0在Ubuntu上安装
- php 公钥格式转换,如何把OpenSSH公钥转换成OpenSSL格式
- qt 获取本机的wifi密码_还在记密码?这款开源免费的账号密码管理神器赶紧收了...
- 多线程编程 RW_LOCK 读写锁
- 莫烦python简历_Matplotlib画图教程
- 《团队-爬取豆瓣电影TOP250-设计文档》
- C#调用非托管Dll
- java list filter_Java8使用stream().filter()过滤List对象(查找符合条件的对象集合)
- java手机翻译,使用JUniversal翻译Android项目
- Python实现网段固定端口扫描
- linux 自动执行脚本
- cesium 经纬度绘制点_Cesium搜索经纬度并标点
- 第三次科技革命(一)
- 【功能测试】part1
- 串口协议发送数据格式详细分析
- This Product is covered by one or more of the folloWing patents
- c语言无法定位程序输入点 于动态链接库,无法定位程序输入点于动态链接库?解决方法步骤...
- windows下解决弹窗广告
热门文章
- Maven web项目创建
- java用户界面—创建一个面板
- 1,字符是否为空,2,比较两个字符大小。String.Compare(String, String)。string.IsNullOrEmpty(string)...
- 关于Log 的一些东西
- 快速排序算法javascript实现
- Implementation:Bellman-ford
- [SPOJ] 1043 Can you answer these queries I [GSS1]
- SharePoint Calendar Webparts
- android 首选项框架,Android:创建自定义首选项
- android builder模式 插件,如何在Kotlin中实现Builder模式?