HDU 4325 Flowers(树状数组+离散化)
来源:互联网 发布:jk js 编辑:程序博客网 时间:2024/06/03 10:23
#include <iostream> #include <cstdio> #include <fstream> #include <algorithm> #include <cmath> #include <deque> #include <vector> #include <queue> #include <string> #include <cstring> #include <map> #include <stack> #include <set> #include <list>#define INF 0x3f3f3f#define maxn 100000 + 50 #define juzheng 300#define ll long longusing namespace std;//Date:2017-9-4//Author:HarryBlackCat struct xx{ int s; int e;}time[maxn];int arr[maxn],tree[maxn],que[maxn],n,m,counter;int lowbit(int x){ return x & (-x);}void add(int index,int val,int n){ for(int i = index;i <= n;i += lowbit(i)) tree[i] += val;}int get_sum(int index){ int ans = 0; for(int i = index ;i > 0; i -=lowbit(i)) ans += tree[i]; return ans; }void init(){ memset(arr,0,sizeof(arr)); memset(tree,0,sizeof(tree)); memset(que,0,sizeof(que)); counter = 0; }int main(){ int t; while(cin >> t){ for(int p = 1;p <= t;p++){ init(); cin >> n >> m; for(int i = 1;i <= n;i++){ cin >> time[i].s >> time[i].e; //将时间段存入待处理的离散化数组 arr[++counter] = time[i].s; arr[++counter] = time[i].e; } for(int i = 1;i <= m;i++){ cin >> que[i]; //将询问时间点存入待处理的离散化数组 arr[++counter] = que[i]; } //离散化处理 sort(arr + 1,arr + 1 + counter);//排序 int len = unique(arr + 1,arr + 1 + counter) - arr - 1;//去重,并记录去重后的长度 for(int i = 1;i <= n;i++){ int s = lower_bound(arr + 1,arr + 1 + len,time[i].s) - arr - 1 + 1;//找到开始点在离散化数组的下标(+1是表示从1开始算起) int e = lower_bound(arr + 1,arr + 1 + len,time[i].e) - arr - 1 + 1;//找到结束点在离散化数组的下标 //利用树状数组储存离散化的区间 add(s,1,len); add(e + 1,-1,len); } printf("Case #%d:\n",p); for(int i = 1;i <= m;i++){ int index = lower_bound(arr + 1,arr + 1 + len,que[i]) - arr - 1 + 1;//找到询问点的离散化数组中的下标 printf("%d\n",get_sum(index));//输出ans } } } return 0;}
阅读全文
1 0
- Hdu 4325 Flowers 树状数组+离散化
- HDU 4325 Flowers(树状数组+离散化)
- hdu 4325 Flowers (树状数组+离散化)
- HDU OJ 4325 Flowers 【树状数组离散化】
- Flowers&&树状数组+离散化
- Flowers--(树状数组,离散化)
- hdu4325 Flowers【树状数组区间更新单点求值 离散化】
- hdu 4325 Flowers(线段树+离散化)
- hdu 4325 Flowers(离散化+线段树)
- #HDU 4325 Flowers 【离散化、区间加减法】
- 解题报告-HDU 4325 (树状数组+离散化)
- HDU-4358-树状数组+离散化
- hdu 3874 树状数组+离散化
- HDU 5101 Select --离散化+树状数组
- hdu 4605(树状数组+离散化)
- HDU 3743 (树状数组,离散化)
- HDU 5654 (树状数组 离散化)
- HDU 5372 (树状数组 离散化)
- extern 全局变量2
- BZOJ 1895 & POJ 3580 supermemo (splay)
- hdu 1208 Pascal's Travels
- POJ 2104 K-th Number 静态第K大模板
- Codeforces Round #433(Div.2) C,D,E题目详解
- HDU 4325 Flowers(树状数组+离散化)
- java SE类初始化过程学习记录
- oracle学习之oracle基础
- poj 3254 Corn Fields (状压dp)
- Codeforces Round #433 (Div. 2) 题解
- Android WebView 中的 Html 网页定位操作
- 暴力枚举 循环数
- MySQL分区
- java虚拟机学习笔记一