poj_3067 Japan
2013-09-11 08:53
232 查看
原题链接:http://poj.org/problem?id=3067
分析: 在纸上画一下就会发现,当我们输入的两个数都按从大到下排序的数时候,就是找当前插入的数与前面的的数的逆序对。(从小到大排,就是比它大的数的个数)。
我的代码:
总结:错了好多次才AC的,每次看到题目都不怎么分析数据大小,long long 呀。
分析: 在纸上画一下就会发现,当我们输入的两个数都按从大到下排序的数时候,就是找当前插入的数与前面的的数的逆序对。(从小到大排,就是比它大的数的个数)。
我的代码:
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long LL; #define MAXK 1000005 #define MAXN 1005 LL C[MAXN]; int n,m,k; struct Node { int a,b; bool operator <(const Node &x)const{ return a>x.a||(a==x.a&&b>x.b); } }p[MAXK]; void add(int i) { for(;i<=m;i+=i&(-i)) C[i]+=1; } LL get_sum(int i) { LL sum=0; for(;i>0;i-=i&(-i)) sum+=C[i]; return sum; } int main() { int t; scanf("%d",&t); for(int cas=1;cas<=t;cas++) { scanf("%d%d%d",&n,&m,&k); for(int i=0;i<k;i++) scanf("%d%d",&p[i].a,&p[i].b); sort(p,p+k); memset(C,0,sizeof(C)); long long ans=0; for(int i=0;i<k;i++) { ans+=get_sum(p[i].b-1); add(p[i].b); } printf("Test case %d: %lld\n",cas,ans); } return 0; }
总结:错了好多次才AC的,每次看到题目都不怎么分析数据大小,long long 呀。
相关文章推荐
- POJ 3067—— Japan(树状数组)
- POJ 3067 Japan 树状数组求逆序对
- zoj 3129 || poj 3067 Japan
- POJ 3067 Japan(利用树状数组求逆序数)
- POJ 3067 Japan—— 树状数组
- POJ 3067 Japan (树状数组)
- POJ 3067 Japan(树状数组:求逆序)
- POJ 3067 Japan(BIT)
- 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 - Japan(树状数组)
- poj--3067 Japan(树状数组+逆序数)
- Poj 3067 Japan