zoukankan      html  css  js  c++  java
  • POJ 3067 Japan (树状数组求逆序对)

    POJ - 3067

    题意:有(1-n)个城市自上到下在左边, 另有(1-m)个城市自上到下在右边,共有m条高速公路,现求这m条直线的交点个数,交点不包括在城市处相交。

    题解:先将高速公路读入,然后按照左边城市序号小的在前,左边序号相同的按照右边城市序号小的在前,然后根据右边的城市序号求逆序数就可以解决了。 因为当处理一条边的时候,这条边一定会和左边序号小于它的且右边序号大于它的边有一个交点。

    代码:

    没想到cin, cout 关了同步流也T了, 然后答案应该是爆int了,平常不怎么用printf 导致 答案改成ll之后还是用%d输出,检查了好久才发现输出写错了,改成%lld就A了,气!

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cstring>
     4 #include<cstdio>
     5 #define ll long long
     6 #define fi first
     7 #define se second
     8 using namespace std;
     9 const int N = 1000+5;
    10 ll tree[N];
    11 int n, m, T, q;
    12 pair<int, int> P[N*N];
    13 int lowbit(int x)
    14 {
    15     return x&(-x);
    16 }
    17 void Add(int x)
    18 {
    19     while(x <= m)
    20     {
    21         tree[x]++;
    22         x += lowbit(x);
    23     }
    24 }
    25 ll Query(int x)
    26 {
    27     ll ret = 0;
    28     while(x > 0)
    29     {
    30         ret += tree[x];
    31         x -= lowbit(x);
    32     }
    33     return ret;
    34 }
    35 int main()
    36 {
    37     scanf("%d",&T);
    38     for(int Case = 1; Case <= T; Case++)
    39     {
    40         scanf("%d%d%d",&n,&m,&q);
    41         //cin >> n >> m >> q;
    42         for(int i = 0; i < q; i++)
    43             scanf("%d%d",&P[i].fi, &P[i].se);
    44             //cin >> P[i].fi >> P[i].se;
    45         sort(P, P+q);
    46         memset(tree, 0, sizeof(tree));
    47         ll ans = 0;
    48         for(int i = 0; i < q; i++)
    49         {
    50             ans += Query(m) - Query(P[i].se);
    51             Add(P[i].se);
    52         }
    53         printf("Test case %d: %lld
    ",Case, ans);
    54         //cout << "Test case " << Case << ": " << ans << endl;
    55     }
    56     return 0;
    57 }
  • 相关阅读:
    目前服务器所需要的技能
    c++11 初始化列表 bind function 示例
    c++11 时间相关操作练习
    C++ Crypto++ RSA加密资料收集
    多线程查找大量数据加锁的速度降低
    c++沉思录 学习笔记 第六章 句柄(引用计数指针雏形?)
    c++沉思录 学习笔记 第五章 代理类
    boost asio 一个聊天的基本框架
    c++11 并发 条件变量 超时等待的代码练习
    centos 6.5 hadoop 2.3 初配置
  • 原文地址:https://www.cnblogs.com/MingSD/p/8405119.html
Copyright © 2011-2022 走看看