zoukankan      html  css  js  c++  java
  • HDU 4941 Magical Forest(2014 Multi-University Training Contest 7)

    思路:将行列离散化,那么就可以用vector 存下10W个点 ,对于交换操作 只需要将行列独立分开标记就行   。

    r[i] 表示第 i 行存的是 原先的哪行         c[j] 表示 第 j 列 存的是原先的哪列。  

    查询只需要一个二分即可。

    #include <iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #include<vector>
    #define MAXN 100050
    using namespace std;
    int r[MAXN], c[MAXN];
    struct info {
        int x, y, z;
    } s[MAXN];
    struct node {
        int va;
        int col;
    };
    bool operator<(node a, node b) {
        return a.col < b.col;
    }
    vector<node> e[MAXN];
    int qr[MAXN];
    int qc[MAXN];
    int main() {
        int cntr, cntc, tt, ri = 0;
        scanf("%d", &tt);
        while (tt--) {
            int n, m, k, tailr, tailc;
            tailr = tailc = 0;
            scanf("%d%d%d", &n, &m, &k);
            for (int i = 0; i < k; ++i) {
                scanf("%d%d%d", &s[i].x, &s[i].y, &s[i].z);
                qr[tailr++] = s[i].x;
                qc[tailc++] = s[i].y;
            }
            sort(qr,qr+tailr);
            sort(qc,qc+tailc);
            tailr = unique(qr, qr + tailr) - qr;
            tailc = unique(qc, qc + tailc) - qc;
            for (int i = 0; i < tailr; ++i)
                e[i].clear();
            for (int i = 0; i < k; ++i) {
                int x = lower_bound(qr, qr + tailr, s[i].x) - qr;
                int y = lower_bound(qc, qc + tailc, s[i].y) - qc;
                node d;
                d.col = y;
                d.va = s[i].z;
                e[x].push_back(d);
            }
            for (int i = 0; i < tailr; ++i)
                sort(e[i].begin(), e[i].end());
            for (int i = 0; i < tailr; ++i)
                r[i] = i;
            for (int i = 0; i < tailc; ++i)
                c[i] = i;
            printf("Case #%d:
    ", ++ri);
            int T;
            scanf("%d", &T);
            while (T--) {
                int x, a, b;
                scanf("%d%d%d", &x, &a, &b);
                if (x == 1) {
                    int idr = lower_bound(qr, qr + tailr, a) - qr;
                    if (qr[idr] != a)
                        continue;
                    int idc = lower_bound(qr, qr + tailr, b) - qr;
                    if (qr[idc] != b)
                        continue;
                    swap(r[idr], r[idc]);
                }
                if (x == 2) {
                    int idr = lower_bound(qc, qc + tailc, a) - qc;
                    if (qc[idr] != a)
                        continue;
                    int idc = lower_bound(qc, qc + tailc, b) - qc;
                    if (qc[idc] != b)
                        continue;
                    swap(c[idr], c[idc]);
                }
                if (x == 3) {
                    int idr = lower_bound(qr, qr + tailr, a) - qr;
                    if (qr[idr] != a)
                    {
                        puts("0");
                        continue;
                    }
                    int idc = lower_bound(qc, qc + tailc, b) - qc;
                    if (qc[idc] != b)
                    {
                        puts("0");
                        continue;
                    }
                    node cc;
                    cc.col=c[idc];
                    vector<node>::iterator it=lower_bound(e[r[idr]].begin(),e[r[idr]].end(),cc);
                    if(it==e[r[idr]].end())
                    {
                        puts("0");
                        continue;
                    }
                    node d=*(it);
                    if(d.col!=c[idc])
                    {
                        puts("0");
                        continue;
                    }
                    printf("%d
    ",d.va);
                }
            }
        }
        return 0;
    }
  • 相关阅读:
    高级特性(4)- 数据库编程
    UVA Jin Ge Jin Qu hao 12563
    UVA 116 Unidirectional TSP
    HDU 2224 The shortest path
    poj 2677 Tour
    【算法学习】双调欧几里得旅行商问题(动态规划)
    南洋理工大学 ACM 在线评测系统 矩形嵌套
    UVA The Tower of Babylon
    uva A Spy in the Metro(洛谷 P2583 地铁间谍)
    洛谷 P1095 守望者的逃离
  • 原文地址:https://www.cnblogs.com/L-Ecry/p/3908330.html
Copyright © 2011-2022 走看看