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 ;}
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 ;}
相关文章推荐
- fzu1894 志愿者选拔 单调队列
- FZU 1894 — 志愿者选拔 单调队列
- FZU 1894 志愿者选拔 单调队列 题解
- FZU - 1894选拔志愿者【单调队列】
- FZU 1894 志愿者选拔[双端队列/单调队列]
- fzu 1894 志愿者选拔 单调队列
- FZU1894 志愿者选拔 --单调队列
- FZU 1894 志愿者选拔[双端队列/单调队列]
- FZU 1894 志愿者选拔【单调队列】【monotone decreasing queue】
- fzu-1894 志愿者选拔-单调队列
- fzu 1894 志愿者选拔(单调队列)
- 单调队列裸题 fzu 1894 志愿者选拔
- fzu 1894 志愿者选拔 单调队列的学习
- FZU 1894 志愿者选拔 单调队列
- FZU 1894(志愿者选拔-裸的单调队列)
- FZU 1894 志愿者选拔 (单调队列)
- FZU 1894 志愿者选拔 - 单调队列
- fzu 1894 志愿者选拔(单调队列)
- fzu 1894 志愿者选拔(单调队列)
- FZU 1894 志愿者选拔【单调队列】【monotone decreasing queue】