您的位置:首页 > 其它

fzu 1894 志愿者选拔 (单调队列)

2012-02-09 23:25 316 查看
http://acm.fzu.edu.cn/problem.php?pid=1894 简单单调队列。

code:

#include<cstdio>
int data[1000001] ;
int queue[1000001] ;
int num[1000001] ;
int h, r, n ;
void insert(){
if(r==h-1||data
<queue[r]){
r ++ ;
queue[r] = data
;
num[r] = n ;
}
else{
while(r>=h&&data
>=queue[r])
r -- ;
queue[++r] = data
;
num[r] = n ;
}
}
void getMax(){
if(h>r) printf("-1\n") ;
else printf("%d\n", queue[h]) ;
}
int main(){
char temp[6] ;
int t, l ;
scanf("%d", &t) ;
while(t--){
h = n = l = 0 ;
r = -1 ;
queue[0] = 0 ;
scanf("%s", temp) ;
while(true){
scanf("%s", temp) ;
if(temp[0]=='C'){
scanf("%s", temp) ;
scanf("%d", &data
) ;
insert() ;
n ++ ;
}
else if(temp[0]=='Q'){
while(r>=h&&num[h]<l)
h ++ ;
getMax() ;
}
else if(temp[0]=='G')
l ++ ;
else break ;
}
}
return 0 ;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: