Flowers&&树状数组+离散化
2012-08-03 09:24
375 查看
题意:给你一些花,以及这些花开花的时间,问你在某一时间开花的总个数~~,很明显的树状数组题,插线问点。。
AC代码:
#include<cstdio>
#include<string.h>
#include<string>
#include<algorithm>
#include<iostream>
#define N 1000005
using namespace std;
typedef struct node
{
int num;
int id;
}Node;
bool cmp(Node a,Node b)
{return a.num<b.num;}
int s
;
Node s1
;
int s2
;
int lowbit(int x)
{return x&(-x);}
void add(int x,int y)
{
while(x<N)
{
s[x]+=y;
x+=lowbit(x);
}
}
int sum(int x)
{
int ans=0;
while(x>0)
{
ans+=s[x];
x-=lowbit(x);
}return ans;
}
int main()
{
int T;
scanf("%d",&T);
for(int k=1;k<=T;++k)
{
memset(s,0,sizeof(s));
int n,m;
scanf("%d%d",&n,&m);
int tot=n<<1;
int res=tot+m;
for(int i=0;i!=res;++i)
{
scanf("%d",&s1[i].num);
s1[i].id=i;
}
sort(s1,s1+res,cmp);
int ans=0;
s2[s1[0].id]=++ans;
for(int i=1;i!=res;++i)
if(s1[i].num!=s1[i-1].num) s2[s1[i].id]=++ans;
else s2[s1[i].id]=ans;
for(int i=0;i!=tot;)
{
add(s2[i++],1);
add(s2[i++]+1,-1);
}
printf("Case #%d:\n",k);
for(int i=tot;i!=res;++i)
{
printf("%d\n",sum(s2[i]));
}
}return 0;
}
AC代码:
#include<cstdio>
#include<string.h>
#include<string>
#include<algorithm>
#include<iostream>
#define N 1000005
using namespace std;
typedef struct node
{
int num;
int id;
}Node;
bool cmp(Node a,Node b)
{return a.num<b.num;}
int s
;
Node s1
;
int s2
;
int lowbit(int x)
{return x&(-x);}
void add(int x,int y)
{
while(x<N)
{
s[x]+=y;
x+=lowbit(x);
}
}
int sum(int x)
{
int ans=0;
while(x>0)
{
ans+=s[x];
x-=lowbit(x);
}return ans;
}
int main()
{
int T;
scanf("%d",&T);
for(int k=1;k<=T;++k)
{
memset(s,0,sizeof(s));
int n,m;
scanf("%d%d",&n,&m);
int tot=n<<1;
int res=tot+m;
for(int i=0;i!=res;++i)
{
scanf("%d",&s1[i].num);
s1[i].id=i;
}
sort(s1,s1+res,cmp);
int ans=0;
s2[s1[0].id]=++ans;
for(int i=1;i!=res;++i)
if(s1[i].num!=s1[i-1].num) s2[s1[i].id]=++ans;
else s2[s1[i].id]=ans;
for(int i=0;i!=tot;)
{
add(s2[i++],1);
add(s2[i++]+1,-1);
}
printf("Case #%d:\n",k);
for(int i=tot;i!=res;++i)
{
printf("%d\n",sum(s2[i]));
}
}return 0;
}
相关文章推荐
- [HDOJ4325]Flowers(树状数组 离散化)
- HDU4325--Flowers--树状数组,离散化
- 【POJ】2299 - Ultra-QuickSort(离散化 & (树状数组 | 线段树))
- Bzoj1818: [Cqoi2010]内部白点 && Tyvj P2637 内部白点 扫描线,树状数组,离散化
- HDU OJ 4325 Flowers 【树状数组离散化】
- hdu 4325 Flowers (树状数组+离散化)
- hdu4325 Flowers【树状数组区间更新单点求值 离散化】
- Flowers--(树状数组,离散化)
- poj2299 Ultra-QuickSort&&NYOJ117 求逆序数 (树状数组求逆序对数+离散化)+(归并排序)
- LightOJ 1085 All Possible Increasing Subsequences (DP&离散化&树状数组)
- HDU 4325 Flowers(树状数组+离散化)
- HDU 4325 Flowers(树状数组+离散化)
- 洛谷2448 无尽的生命[树状数组 离散化]
- poj 2299 Ultra-QuickSort(树状数组求逆序数+离散化)
- [BZOJ2819] Nim && dfs序 + 树状数组 + LCA
- HDU5792(2016多校第五场)——World is Exploding(树状数组,离散化)
- hdu5792 World is Exploding(多校第五场)树状数组求逆序对 离散化
- POJ 3928 & hdu 2492 & Uva1428 PingPong 【树状数组】
- hdu2852 KiKi's K-Number 树状数组求第k大数
- ACM学习历程—SNNUOJ 1239 Counting Star Time(树状数组 && 动态规划 && 数论)