zoukankan      html  css  js  c++  java
  • STL set<pair<int ,int> >用法

    题目链接:https://vjudge.net/contest/236677#problem/D

    题意:有n张桌子,编号1到n,有q次询问。之后给出编号1到n的桌子的椅子数。询问有两种情况,in 进来num个人,如果能坐,选符合条件椅子数最小的,若有多组符合则选编号小的输出桌子编号。没有符合的条件则输出-1。out 则是出来num号桌子空出来。

    用pair容器来储存桌子和相应椅子数,frist存椅子数,second存对应桌子,

    pari的比较是按照字典序比较的,还有就是先比较first,frist的值大的时候,pair就大

    如果first相等,再比较second,second大的就pair大。

    再用set容器维护,因为set自带升序排序,所以用set方便,直接用库函数lower_bound()查找答案。

    代码如下:

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    #include<cstring>
    #include<set>
    #include<vector>
    using namespace std;
    set<pair<int,int> >s;
    set<pair<int,int> >::iterator it;
    int a[100050];
    int main()
    {
        int n,m;
        while(cin>>n>>m)
        {
            for(int i=1;i<=n;i++)
            {
                cin>>a[i];
                s.insert(make_pair(a[i],i));//插入椅子数及其桌号 
            }
            char str[10];
            int t;
            while(m--)
            {
                cin>>str>>t;
                if(str[0]=='i')
                {
                    it=s.lower_bound(make_pair(t,0));//寻找答案 
                    if(it==s.end())//没有符合条件 的 
                        cout<<-1<<endl;
                    else
                    {
                        cout<<it->second<<endl;//有,输出桌号 
                        s.erase(it);
                    }
                }    
                else
                {
                    s.insert(make_pair(a[t],t));//人走了,桌子可以坐,插入 进去 
                }
            }
        }
        return 0;
    }
  • 相关阅读:
    C# 2.0 中Iterators的改进与实现原理浅析
    C#窗口关闭时最小化到托盘
    设计模式有趣解释
    序列化学习
    线程学习
    正则表达式
    .net内存回收与Dispose﹐Close﹐Finalize方法 [摘]
    5.匿名函数lambda
    2dns服务器解析创建
    2.ftp匿名
  • 原文地址:https://www.cnblogs.com/xiongtao/p/9272543.html
Copyright © 2011-2022 走看看