poj 3067
题意:日本东海岸有n个城市,西海岸有m个城市,现在要修建k条高铁连接东海岸的城市u和西海岸的城市v。问这k条高铁总共有多少个交点。
代码:
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
vector<long long> a[1001];
long long n,m;
long long b[1001];
long long lowbit(long long x){
return x&(-x);
}
void add(long long s,long long t){
while(s<=m)
{
b[s]+=t;
s+=lowbit(s);
}
}
long long getsum(long long s){
long long k=0;
while(s>0)
{
k+=b[s];
s-=lowbit(s);
}
return k;
}
void read(){
// ifstream cin("in.txt");
long long i,j,k,s,t;
long long cas;
scanf("%lld",&cas);
for(k=1;k<=cas;k++)
{
scanf("%lld%lld%lld",&n,&m,&s);
memset(b,0,sizeof(b));
for(i=1;i<=n;i++)
a[i].clear();
for(i=1;i<=s;i++)
{
scanf("%lld%lld",&j,&t);
a[j].push_back(t);
add(t,1);
}
long long ans=0;
for(i=1;i<n;i++)
{
for(j=0;j<a[i].size();j++)
add(a[i][j],-1);
for(j=0;j<a[i].size();j++)
ans+=getsum(a[i][j]-1);
}
printf("Test case %lld: %lld\n",k,ans);
}
}
int main(){
read();
return 0;
}
浙公网安备 33010602011771号