zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    ClickOnce發布經驗
    reporting Server組件不全引起的致命錯誤
    異步調用
    Usercontrol Hosted in IE
    MATLAB命令大全(转载)
    一种保护眼睛的好方法
    关于oracle自动编号
    An Algorithm Summary of Programming Collective Intelligence (1)
    An Algorithm Summary of Programming Collective Intelligence (3)
    An Algorithm Summary of Programming Collective Intelligence (4)
  • 原文地址:https://www.cnblogs.com/TnT2333333/p/6211796.html
Copyright © 2011-2022 走看看