HDU1556 - Color the ball - 前缀和/线段树/树状数组
思路
周赛的一开始直接用book进行标记,后来TLE,然后改成map,继续TLE
后来想到用线段树写,但是没写对;想用树状数组写,结果发现不会写
AC代码(前缀和)
//前缀和的做法
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
const int N=100020;
int a[N];
int sum[N];
int main()
{
int n;
while(~scanf("%d",&n)&&n)
{
memset(a,0,sizeof(a));
int aa,bb;
for(int i=0; i<n; i++)
{
scanf("%d %d",&aa,&bb);
// a[aa]=a[aa]+1;
// a[bb+1]=a[bb+1]-1;
a[aa]++;
a[bb+1]--;
}
//求前缀和
sum[0]=0;
for(int i=1;i<=n;i++)
sum[i]=sum[i-1]+a[i];
for(int i=1;i<n;i++)
printf("%d ",sum[i]);
printf("%d\n",sum[n]);
}
return 0;
}
AC代码(线段树)
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
const int N=100020;
int a[4*N];
int ans[4*N];
int p;
//void pushdown(int i,int len)
//{
// if(lazy[i])
// {
// lazy[i<<1]=lazy[i];
// lazy[i<<1|1]=lazy[i];
// a[i<<1]=(len-(len>>1))*lazy[i];
// a[i<<1|1]=(len>>1)*lazy[i];
// lazy[i]=0;
// }
//}
void pushdown(int i)
{
a[i<<1]+=a[i];
a[i<<1|1]+=a[i];
}
//void build(int L,int R,int i)
//{
// if(L==R)
// {
// a[i]=0;
// return;
// }
// int mid=(L+R)>>1;
// build(L,mid,i<<1);
// build(mid+1,R,i<<1|1);
// a[i]=a[i<<1]+a[i<<1|1];
//}
void update(int left,int right,int L,int R,int i)
{
if(left<=L&&right>=R)
{
// lazy[i]+=1;
// a[i]=R-L+1;
a[i]++;
return;
}
// pushdown(i,R-L+1);
int mid=(R+L)>>1;
if(left<=mid)
update(left,right,L,mid,i<<1);
if(right>mid)
update(left,right,mid+1,R,i<<1|1);
// a[i]=a[i<<1]+a[i<<1|1];
}
void query(int L,int R,int i)
{
if(L==R)
{
ans[p++]=a[i];
return;
}
int mid=(L+R)>>1;
pushdown(i);
query(L,mid,i<<1);
query(mid+1,R,i<<1|1);
}
int main()
{
int n;
while(~scanf("%d",&n)&&n)
{
memset(a,0,sizeof(a));
memset(ans,0,sizeof(ans));
// build(1,n,1);
int aa,bb;
p=0;
for(int i=0; i<n; i++)
{
scanf("%d %d",&aa,&bb);
// if(aa==bb)
// {
// a[aa]++;
// continue;
// }
update(aa,bb,1,n,1);
}
query(1,n,1);
for(int i=0; i<n-1; i++)
printf("%d ",ans[i]);
printf("%d\n",ans[n-1]);
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」