cf749 D.Leaving Auction
Posted ws_ccd
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cf749 D.Leaving Auction相关的知识,希望对你有一定的参考价值。
1 #include<bits/stdc++.h> 2 #define lowbit(x) x&(-x) 3 #define LL long long 4 #define N 200005 5 #define M 1000005 6 #define mod 1000000007LL 7 #define inf 0x7ffffffff 8 using namespace std; 9 inline int ra() 10 { 11 int x=0,f=1; char ch=getchar(); 12 while (ch<‘0‘ || ch>‘9‘){if (ch==‘-‘) f=-1; ch=getchar();} 13 while (ch>=‘0‘ && ch<=‘9‘){x=x*10+ch-‘0‘; ch=getchar();} 14 return x*f; 15 } 16 vector<int> man[N]; 17 int mx[N],person[N]; 18 bool cmp(int a, int b) 19 { 20 return mx[a]<mx[b]; 21 } 22 int main() 23 { 24 int n=ra(); 25 for (int i=1; i<=n; i++) 26 { 27 int a=ra(),b=ra(); 28 man[a].push_back(b); 29 mx[a]=b; 30 person[i]=i; 31 } 32 sort(person+1,person+1+n,cmp); 33 int q=ra(); 34 while (q--) 35 { 36 set<int> leave; 37 int k=ra(); 38 for (int i=1; i<=k; i++) 39 { 40 int t=ra(); 41 leave.insert(t); 42 } 43 int tmp[2],num=0; 44 tmp[0]=tmp[1]=0; 45 for (int i=n; i>=1; i--) 46 { 47 if (leave.count(person[i])) continue; 48 tmp[num++]=person[i]; 49 if (num==2) break; 50 } 51 if (man[tmp[0]].size()==0) 52 { 53 cout<<"0 0"<<endl; 54 continue; 55 } 56 if (num==2) 57 { 58 int it=*lower_bound(man[tmp[0]].begin(),man[tmp[0]].end(),mx[tmp[1]]); 59 printf("%d %d\n",tmp[0],it); 60 } 61 else if (num==1) 62 printf("%d %d\n",tmp[0],man[tmp[0]][0]); 63 } 64 return 0; 65 } 66 //真是尴尬了一开始,竟然觉得找个最大的就可以了2333 67 //没想到只是比第二大最大的大就可以,真是已经弱智了。 68 //第一次发现vector还可以用lower_bound玩2333
以上是关于cf749 D.Leaving Auction的主要内容,如果未能解决你的问题,请参考以下文章