zoukankan      html  css  js  c++  java
  • 洛谷P3939 数颜色(二分 vector)

    题意

    题目链接

    Sol

    直接拿vector维护每种颜色的出现位置,然后二分一下。

    #include<bits/stdc++.h>
    using namespace std;
    const int MAXN = 3e5 + 10;
    inline int read() {
        char c = getchar(); int x = 0, f = 1;
        while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
        while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
        return x * f;
    }
    int N, M, a[MAXN];
    vector<int> v[MAXN];
    void Modify(int c, int l, int val) {
        vector<int> &T = v[c];
        int pos = lower_bound(T.begin(), T.end(), l) - T.begin();
        T[pos] += val;
    }
    int Query(int c, int pos) {
        vector<int> &T = v[c];
        int num = upper_bound(T.begin(), T.end(), pos) - T.begin();
        if(num == 0) return 0;
        else return num;
    }
    int main() {
        N = read(); M = read();
        for(int i = 1; i <= N; i++) v[a[i] = read()].push_back(i);
        for(int i = 1; i <= M; i++) {
            int opt = read();
            if(opt == 1) {
                int l = read(), r = read(), c = read();
                printf("%d
    ", Query(c, r) - Query(c, l - 1));
            } else {
                int l = read(), r = l + 1;
                if(a[l] != a[r]) {
                    Modify(a[l], l, 1); Modify(a[r], r, -1);
                    swap(a[l], a[r]);
                }
            }
        }
        return 0;   
    }
    
  • 相关阅读:
    RedHat的定制安装
    Linux系统概述
    嵌入式学习方法
    mysql联合查询
    mysql之count
    memcached安装
    css书写规则
    nginx的fastcgi_param参数详解
    array_2.array_rand
    array_1.array_map
  • 原文地址:https://www.cnblogs.com/zwfymqz/p/10082309.html
Copyright © 2011-2022 走看看