poj3250 再遇单调队列

一群动物排了个队,高度不同,求每个动物向右看到比他矮的动物数之和(当然,有比他高的就挡住后面的)。

这题开始我写成了严格单调,狂wa,改之,ac。

#include <iostream> #include <queue> using namespace std; struct data { int x,id; }q[100010]; unsigned int ans; int a[100010],n,k,i; int head,tail; void insert(int x,int id) { if (head==tail+1) { q[head].x=x; q[head].id=id; tail++; } else { while (q[tail].x<=x && head<=tail) tail--; tail++; q[tail].x=x; q[tail].id=id; } } int main() { cin >> n; for (i=1;i<=n;i++) scanf("%d",&a[i]); head=1;tail=0; ans=0; for (i=1;i<=n;i++) { insert(a[i],i); ans+=(long long)(tail-head); } printf("%u/n",ans); //system("pause"); return 0; }

你可能感兴趣的:(insert,iostream)