您的位置:首页 > 其它

poj--3067 Japan(树状数组+逆序数)

2016-09-15 17:26 309 查看
3067 Japan

题解

(POJ为什么不与时俱进升级下编译器呢..)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;

#define fst first
#define sec second

const int maxn = 1000 + 5;
typedef pair<int, int> PII;
vector< PII > vec;
int c[maxn];
int n, m, k, t;

int lowbit(int x) { return x & -x; }
void update(int x, int v){
for(int i = x; i <= maxn; i += lowbit(i)) c[i] += v;
}
int query(int x){
int s = 0;
for(int i = x; i ; i -= lowbit(i)) s += c[i];
return s;
}

int cmp(const PII& p1, const PII& p2){ return p1.fst == p2.fst ? p1.sec < p2.sec : p1.fst < p2.fst; }

int main(){
#ifdef EXMY
freopen("data.in", "r", stdin);
#endif // EXMY

scanf("%d", &t);
for(int Case = 1; Case <= t; ++Case){
vec.clear();
memset(c, 0, sizeof(c));
scanf("%d %d %d", &n, &m, &k);
int e, w;
for(int i = 0; i < k; ++i){
scanf("%d %d", &e, &w);
vec.push_back(PII(e, w));
}
sort(vec.begin(), vec.end(), cmp);
long long ans = 0;
for(int i = 0; i < vec.size(); ++i){
update(vec[i].sec, 1);
ans += (i + 1) - query(vec[i].sec);
}
printf("Test case %d: %I64d\n", Case, ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  poj 树状数组 逆序数