hdu 1556 Color the ball
要想区间改动的话,那么节点就必须往上更新,查询时往上累加。(区间改动。单点查询)
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=100000+5;
int C[maxn];
int n;
int lowbit(int x)
{
return (-x)&x;
}
void update(int x,int y)
{
for(int i=x; i>0;i-=lowbit(i))
C[i]+=y;
}
int query(int x)
{
int s=0;
for(int k=x; k<=n; k+=lowbit(k))
s+=C[k];
return s;
}
int main()
{
int a,b;
while(cin>>n)
{
for(int i=1; i<=n; i++)
C[i]=0;
for(int h=0;h<n;h++)
{
scanf("%d%d",&a,&b);
update(b,1);
update(a-1,-1);
}
for(int j=1;j<=n;j++)
if(j==n) printf("%d\n",query(j));
else
printf("%d ",query(j));
//printf("%d%c",query(i),i==n?'\n':' ');
}
return 0;
}
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
const int N = 1e5+10;
int c[N],m,n,k,a[N];
int x[N],y[N];
int lowbit(int k)
{
return k&(-k);
}
void add(int k,int he)
{
while(k>0)
{
c[k]+=he;
k-=lowbit(k);
}
}
int Q(int k)
{
int query=0;
while(k<=n)
{
query+=c[k];
k+=lowbit(k);
}
return query;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.cpp","r",stdin);
#endif // ONLINE_JUDGE
int t,from,to,he,kkk=1;
while(~scanf("%d%d%d",&n,&m,&k))
{
memset(c,0,sizeof(c));
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,a+n);
int cur=1;
int s,t;
for(int i=1;i<=m;i++)
{
scanf("%d %d",&s,&t);
int from=upper_bound(a,a+n,cur)-a;
int to=upper_bound(a,a+n,s)-a;
add(from,-1);
add(to,+1);
cur=t;
}
int ans =0 ;
for(int i=1;i<=n;i++)
{
int kk =Q(i);
if(kk>=k)
ans = ans+1;
}
printf("Case %d: %d\n",kkk++,ans);
}
return 0;
}
相关题: hdu A Simple Problem with Integers
版权声明:本文博主原创文章。博客,未经同意不得转载。