| ||||||||||
| 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 | |||||||||
求助,为什么打问号的地方不能这么写,代码如下#include <stdio.h>
#include <iostream>
#include <memory.h>
#include <algorithm>
using namespace std;
const int maxnum=100005;
struct node
{
int l,r;
int pos;
}array[maxnum];
int tree[maxnum];
int ans[maxnum];
int n;
bool cmp(struct node a,struct node b)
{
if(a.r==b.r)
return a.l<b.l;
return a.r>b.r;
}
void update(int index,int add)
{
while(index<=maxnum)
{
tree[index]+=add;
index+=(-index)&index;
}
}
int getsum(int index)
{
int sum=0;
while(index>0)
{
sum+=tree[index];
index-=(-index)&index;
}
return sum;
}
int main()
{
int i;
while(scanf("%d",&n) && n!=0)
{
for(i=0;i<n;i++)
{
scanf("%d%d",&array[i].l,&array[i].r);
array[i].pos=i;
}
sort(array,array+n,cmp);
memset(tree,0,sizeof(tree));
int cnt=0;
for(i=0;i<n;i++)
{
if(i!=0 && array[i].l==array[i-1].l && array[i].r==array[i-1].r)
{
ans[array[i].pos]=ans[array[i-1].pos];
cnt++;
}
else
{
update(array[i].l+1,1);//????????????????
ans[array[i].pos]=getsum(array[i].l+1)-1+cnt;//???????????
}
}
for(i=0;i<n-1;i++)
printf("%d ",ans[i]);
printf("%d\n",ans[i]);
}
return 0;
}
打问号的地方的意思是,我只对不相同的坐标点进行update,如果相同的话,cnt++,然后在求和的时候把cnt加上。测试的几个用例都能通过,但是WA,真心求助大牛啊..
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator