qsc oj-17 喵哈哈村的排队
Posted Ying_zx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qsc oj-17 喵哈哈村的排队相关的知识,希望对你有一定的参考价值。
http://qscoj.cn/problem/17/
喵哈哈村的排队
有一堆喵哈哈村的村民们在排队,他们从队列的尾部开始标号,标号为1的村民站在最后面,标号为n的村民站在队列的最前面,而且每个村民都拥有一个智商值a[i]。
这些村民有时候会觉得不开心,因为他们觉得凭什么一个智商比他低的人,可以站在他的前面!现在对于每个村民,他们都想知道,在他前面,智商比他低,离他最远的距离是多少。
第一行n,表示有n只咸鱼
第二行n个整数,表示每个村民的智商值a[i].
n<=200000 1<=a[i]<=1000000000
对于每个村民,输出智商比他的,且离他最远的距离是多少,如果没有输出-1
复制
6 10 8 5 3 50 45
2 1 0 -1 0 -1
1 #pragma comment(linker, "/STACK:1024000000,1024000000") 2 #include<iostream> 3 #include<cstdio> 4 #include<cmath> 5 #include<string> 6 #include<queue> 7 #include<algorithm> 8 #include<stack> 9 #include<cstring> 10 #include<vector> 11 #include<list> 12 #include<set> 13 #include<map> 14 using namespace std; 15 #define ll long long 16 #define pi (4*atan(1.0)) 17 #define eps 1e-14 18 #define bug(x) cout<<"bug"<<x<<endl; 19 const int N=1e5+10,M=1e6+10,inf=2147483647; 20 const ll INF=1e18+10,mod=2147493647; 21 int a[N]; 22 int r[N]; 23 int main() 24 { 25 int n; 26 while(~scanf("%d",&n)) 27 { 28 for(int i=1;i<=n;i++) 29 scanf("%d",&a[i]); 30 r[n]=a[n]; 31 for(int i=n-1;i>=1;i--) 32 r[i]=min(r[i+1],a[i]); 33 for(int i=1;i<=n;i++) 34 { 35 int st=i+1; 36 int en=n,ans=-1; 37 while(st<=en) 38 { 39 int mid=(st+en)>>1; 40 if(a[i]>r[mid]) 41 { 42 st=mid+1; 43 ans=mid; 44 } 45 else 46 en=mid-1; 47 } 48 if(ans==-1) 49 printf("-1"); 50 else 51 printf("%d",ans-i-1); 52 printf("%c",((i==n)?‘\n‘:‘ ‘)); 53 } 54 } 55 return 0; 56 }
以上是关于qsc oj-17 喵哈哈村的排队的主要内容,如果未能解决你的问题,请参考以下文章