• codeforces 749D Leaving Auction(二分)


    题目链接:http://codeforces.com/problemset/problem/749/D

    题意:就是类似竞拍,然后报价肯定要比上一个高,然后查询输入k个数表示那些人的竞拍无效,

    输出最后谁竞拍到了花了多少钱。

    比较简单的二分只要找到删除无效人后最大的两个人然后用第二大的那个人的最大竞拍价二分查找

    最大的那个人中的竞拍价,然后的得到的第一个大于等于的值即可。

    #include <iostream>
    #include <cstring>
    #include <algorithm>
    #include <vector>
    using namespace std;
    const int M = 2e5 + 10;
    vector<int>vc[M];
    int cp[M] , vis[M] , change[M];
    struct TnT {
        int num , val;
    }s[M];
    bool cmp(TnT a , TnT b) {
        return a.val > b.val;
    }
    int maxn , maxnnext , temp;
    void find() {
        int flag = 0;
        for(int i = 0 ; i < temp ; i++) {
            if(flag == 2) {
                break;
            }
            if(!vis[s[i].num]) {
                if(flag == 0) {
                    maxn = s[i].num;
                    flag++;
                    continue;
                }
                if(flag == 1) {
                    maxnnext = s[i].num;
                    flag++;
                    continue;
                }
            }
        }
    }
    int binsearch(int pos , int val) {
        int l = 0 , r = vc[pos].size() - 1;
        while(l <= r) {
            int mid = (l + r) >> 1;
            if(vc[pos][mid] >= val)
                r = mid - 1;
            else {
                l = mid + 1;
            }
        }
        return r + 1;
    }
    int main() {
        int n;
        cin >> n;
        for(int i = 0 ; i < n ; i++) {
            int x , y;
            cin >> x >> y;
            vc[x].push_back(y);
            cp[x] = y;
        }
        temp = 0;
        for(int i = 1 ; i <= M - 10 ; i++) {
            if(cp[i] != 0) {
                s[temp].num = i;
                s[temp++].val = cp[i];
            }
        }
        sort(s , s + temp , cmp);
        int q;
        cin >> q;
        while(q--) {
            int k;
            cin >> k;
            for(int i = 1 ; i <= k ; i++) {
                cin >> change[i];
                vis[change[i]] = 1;
            }
            maxn = 0 , maxnnext = 0;
            find();
            int gg = cp[maxnnext];
            int ans = binsearch(maxn , gg);
            if(maxn == 0) {
                cout << 0 << ' ' << 0 << endl;
            }
            else if(maxnnext == 0) {
                cout << maxn << ' ' << vc[maxn][0] << endl;
            }
            else {
                cout << maxn << ' ' << vc[maxn][ans] << endl;
            }
            for(int i = 1 ; i <= k ; i++) {
                vis[change[i]] = 0;
                change[i] = 0;
            }
        }
        return 0;
    }
    
  • 相关阅读:
    CuteWebUI AJAX Uploader上载控件介绍
    Trident的发展
    jQuery定义类及扩展
    margintop和paddongtop IE
    自己实现的一个简单的相册效果
    Firefox 浮动层背景图不能自动平铺(困惑)
    jQuery对象和DOM对象
    jQuery之Ajax之一
    position
    DOM基础心得
  • 原文地址:https://www.cnblogs.com/TnT2333333/p/6211796.html
Copyright © 2020-2023  润新知