| ||||||||||
| 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 | |||||||||
求解,线段树这样写为何会WA?#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<map>
#include<vector>
#include<queue>
using namespace std;
int n,m,k;
struct node
{
int a,b;
}a[1005*1005];
struct tree
{
int l,r,sum;
}tree[1005<<2];
bool cmp(const node &a,const node &b)
{
if(a.a==b.a)
return a.b<b.b;
return a.a<b.a;
}
void build(int l,int r,int now)
{
tree[now].l=l;
tree[now].r=r;
tree[now].sum=0;
if(l==r)
return ;
int mid=(l+r)>>1;
build(l,mid,now<<1);
build(mid+1,r,now<<1|1);
}
void update(int t,int now)
{
if(tree[now].l==tree[now].r)
{
tree[now].sum++;
return ;
}
int mid=(tree[now].l+tree[now].r)>>1;
if(t<=mid)
{
update(t,now<<1);
tree[now].sum=(tree[now<<1].sum);
}
else
{
update(t,now<<1|1);
tree[now].sum=(tree[now<<1].sum+tree[now<<1|1].sum);
}
}
int main()
{
int t,cases=0;
cin>>t;
while(t--)
{
cin>>n>>m>>k;
for(int i=0;i<k;i++)
{
int t1,t2;
scanf("%d%d",&t1,&t2);
a[i].a=t1;
a[i].b=t2;
}
sort(a,a+k,cmp);
build(1,m,1);
long long ans=0;
for(int i=0;i<k;i++)
{
update(a[i].b,1);
ans+=(i+1-tree[1].sum);
}
++cases;
cout<<"Test case "<<cases<<": "<<ans<<endl;
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator