poj 3067 japan 树状数组
2012-03-22 11:03
393 查看
Poj3067 japan 这里求的是高架桥交叉的个数,首先按照规则排序,然后同上处理
这里要注意的是 输入输出要用scanf 且要用sum要用__int64
#include<iostream>
#include<algorithm>
#include<cstring>
#define maxn 2005
#define MAX 1000010
using namespace std;
struct node
{
int east,west;
};
int tree[maxn/2];
node input[MAX];
int cmp(node x1,node x2)
{
if(x1.east!=x2.east)
return x1.east<x2.east;
else
return x1.west<x2.west;
}
void update(int x,int val)
{
while(x<=1001)
{
tree[x]+=val;
x+=(x&(-x));
};
}
long long getsum(int x)
{
long long sum=0;
while(x>0)
{
sum+=tree[x];
x-=(x&-x);
}
return sum;
}
int main()
{
int nCase;
int N,M,K;
int T=1;
cin>>nCase;
while(nCase--)
{
//cin>>N>>M>>K;
scanf("%d%d%d",&N,&M,&K);
memset(tree,0,sizeof(tree));
for(int i=1;i<=K;i++)
//cin>>input[i].east>>input[i].west;
scanf("%d%d",&input[i].east,&input[i].west);
sort(input+1,input+K+1,cmp);
long long sum=0;
for(int i=1;i<=K;i++)
{
update(input[i].west,1);
sum+=i-getsum(input[i].west);
}
//cout<<"Test case "<<T<<": "<<sum<<endl;
printf("Test case %d: %I64d\n",T,sum); //这里居然必须要用__int64这种,也就是说必须要用这种格式输出,太bt了
T++;
}
system("pause");
return 0;
}
这里要注意的是 输入输出要用scanf 且要用sum要用__int64
#include<iostream>
#include<algorithm>
#include<cstring>
#define maxn 2005
#define MAX 1000010
using namespace std;
struct node
{
int east,west;
};
int tree[maxn/2];
node input[MAX];
int cmp(node x1,node x2)
{
if(x1.east!=x2.east)
return x1.east<x2.east;
else
return x1.west<x2.west;
}
void update(int x,int val)
{
while(x<=1001)
{
tree[x]+=val;
x+=(x&(-x));
};
}
long long getsum(int x)
{
long long sum=0;
while(x>0)
{
sum+=tree[x];
x-=(x&-x);
}
return sum;
}
int main()
{
int nCase;
int N,M,K;
int T=1;
cin>>nCase;
while(nCase--)
{
//cin>>N>>M>>K;
scanf("%d%d%d",&N,&M,&K);
memset(tree,0,sizeof(tree));
for(int i=1;i<=K;i++)
//cin>>input[i].east>>input[i].west;
scanf("%d%d",&input[i].east,&input[i].west);
sort(input+1,input+K+1,cmp);
long long sum=0;
for(int i=1;i<=K;i++)
{
update(input[i].west,1);
sum+=i-getsum(input[i].west);
}
//cout<<"Test case "<<T<<": "<<sum<<endl;
printf("Test case %d: %I64d\n",T,sum); //这里居然必须要用__int64这种,也就是说必须要用这种格式输出,太bt了
T++;
}
system("pause");
return 0;
}
相关文章推荐
- POJ_3067 Japan[ 逆序数 树状数组 or 归并排序)
- poj 3067 Japan(线段树 | 树状数组)
- POJ 3067 - Japan 树状数组~细心估计数据范围
- poj 3067 Japan(线段树 | 树状数组)
- POJ 3067 Japan—— 树状数组
- POJ 3067 Japan 树状数组
- POJ 3067 Japan 树状数组
- POJ 3067-Japan-树状数组
- POJ 3067 Japan 树状数组
- 两边点连直线求交点总数 树状数组或线段树 poj 3067 Japan
- 【poj 3067 cdoj 383】Japan 树状数组
- ZOJ 3129 || POJ 3067 Japan
- BIT (树状数组) ——Poj 3067 Japan
- POJ 3067 - Japan
- poj 3067 Japan
- POJ 3067 Japan 【树状数组-逆序对】
- POJ 3067 Japan 树状数组 .
- poj 3067 树状数组
- POJ 3067 Japan (树状数组)
- POJ 3067 Japan(树状数组求逆序对)