一道简单的树状数组的题,不过用cin和cout TLE,用printf和scanf 竟然只用了600多ms,这倒是让我意外了。。。题目:
当N = 0,输入结束。
#include <iostream>
#include <string.h>
#include <string>
#include <cstdio>
int ss[100005];
using namespace std;
int n;
int lowbit(int x){
return x&(-x);
}
void update(int x,int y){
while(x>0){
ss[x]+=y;
x-=lowbit(x);
}
}
int sum(int x){
int s=0;
while(x<=n){
s+=ss[x];
x+=lowbit(x);
}
return s;
}
int main(){
//int n;
while(scanf("%d",&n)&&n){
memset(ss,0,sizeof(ss));
int a,b,m;
m=n;
while(m--){
scanf("%d%d",&a,&b);
update(a-1,-1);
update(b,1);
}
for(int i=1;i<n;++i){
printf("%d ",sum(i));
}
printf("%d\n",sum(n));
}
return 0;
}
树状数组与输入输出效率
本文探讨了一道使用树状数组解决的问题,通过对比cin和cout与printf和scanf的性能差异,揭示了输入输出效率对程序性能的影响。具体场景为解决给定气球涂色的计数问题。
402

被折叠的 条评论
为什么被折叠?



