//棧
int st[] ;
void push(int x)
{
st[tp++] = x;
}
void pop()
{
--tp;
}
int top()
{
return st[tp-1];
}
//隊列
void push(int x)
{
q[tail++] = x;
}
void pop()
{
++head;
}
int front()
{
return q[head];
}
單調隊列(以POJ2823爲例)//詢問區間最大最小值:
for(int i = 1;i < k;i ++)
{
while(Head <= Tail && Num[Tail] >= v[i]) Tail--;
Tail++;
Num[Tail] = v[i];
Bh[Tail] = i;
}
for(int i = k;i <= n;i ++)
{
while(Head <= Tail && Num[Tail] >= v[i]) Tail --;
Tail ++;
Num[Tail] = v[i];
Bh[Tail] = i;
while(Bh[Head] <= i - k) Head ++;
printf("%d ",Num[Head]);
}
printf("\n");
for(int i = 1;i < k;i ++)
{
while(head <= tail && num[tail] <= v[i]) tail --;
tail ++;
num[tail] = v[i];
bh[tail] = i;
}
for(int i = k;i <= n;i ++)
{
while(head <= tail && num[tail] <= v[i]) tail--;
tail ++;
num[tail] = v[i];
bh[tail] = i;
while(bh[head] <= i - k) head ++;
printf("%d ",num[head]);
}