标签:bit for cout bsp sync 查找 cin lower 递增
由题意得,如果有个人从前往后能找到第一个不低于自己等级的任务,就会接取其后所有任务
那么就可以让输入数据处理成递增数列
例如1 3 5 4 6 2 7 7 3
可以处理成1 3 5 5 6 6 7 7 7
因为进来的成员总是从前往后看,所以只要每次查找剩余的任务里第一个大于等于它的等级的即可
如果没有,接取最后一个
因为处理成递增数列了,所以可以二分查找答案
1 #include<bits/stdc++.h> 2 using namespace std; 3 int ar[100005]; 4 int main(){ 5 ios::sync_with_stdio(0); 6 cin.tie(0);cout.tie(0); 7 int T,n,m,i,d,ed,ans; 8 cin>>T; 9 while(T--){ 10 cin>>n>>m>>ar[0]; 11 for(i=1;i<n;i++){ 12 cin>>d; 13 ar[i]=max(d,ar[i-1]); 14 } 15 ed=n; 16 for(ans=i=0;ed&&i<m;i++){ 17 cin>>d; 18 d=lower_bound(ar,ar+ed,d)-ar; 19 if(d==ed) 20 ed--; 21 else 22 ed=d; 23 ans++; 24 } 25 for(;i<m;i++) 26 cin>>d; 27 cout<<ans<<‘\n‘; 28 } 29 30 return 0; 31 }
标签:bit for cout bsp sync 查找 cin lower 递增
原文地址:https://www.cnblogs.com/stelayuri/p/12238940.html