| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
数组为什么要开1500000。。。。。。才能过,《贴代码》。。做了好久啊#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn=1500000;//数组为何开这么大。。。
int tree[maxn],sum[maxn],num[maxn][2],n;
int sum_insert(int l,int r,int rt)
{
if(l==r) return sum[rt]=1;
return sum[rt]=sum_insert(l,(l+r)/2,rt*2)+sum_insert((l+r)/2+1,r,rt*2+1);
}
int insert(int pos,int val,int rt)
{
if(sum[rt*2]==-1) {tree[rt]=val;return sum[rt]-=1;}
if(sum[rt*2]<pos) return sum[rt]=sum[rt*2]+insert(pos-sum[rt*2],val,rt*2+1);
else return sum[rt]=sum[rt*2+1]+insert(pos,val,rt*2);
}
//int push_up(int l,int r,int rt) { if(l==r) return sum[rt]=tree[rt]?0:1; return sum[rt]=push_up(l,(l+r)/2,rt*2)+push_up((l+r)/2+1,r,rt*2+1); }
void output(int l,int r,int rt)
{
if(l==r) {printf("%d",tree[rt]);return ;}
output(l,(l+r)/2,rt*2);printf(" ");
output((l+r)/2+1,r,rt*2+1);
}
int main()
{
while(~scanf("%d",&n)){
memset(sum,-1,sizeof sum),memset(tree,0,sizeof tree);
sum_insert(1,n,1);
for(int i=0;i<n;i++) scanf("%d%d",&num[i][0],&num[i][1]);
for(int i=0;i<n;i++) num[i][0]+=1;
for(int i=n-1;i>=0;i--) insert(num[i][0],num[i][1],1);//push_up(1,n,1);贡献几次超时,其实可以同时完成
output(1,n,1); printf("\n");
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator