#include<cstdio>
#include<stack>
#define stacks std::stack
struct node{
int number=0,identity=0,point=0;
};
void read(int &input){
input=0;
int minus=1;
char got=getchar();
while('9'<got||got<'0'){
if(got=='-'){
minus=-1;
};
got=getchar();
};
while('0'<=got&&got<='9'){
input=input*10+got-'0';
got=getchar();
};
input*=minus;
};
void write(const int &output){
if(output<0){
putchar('-');
};
if(output>9){
write(output/10);
};
putchar(output%10+'0');
};
int main(int argc,char **argv){
int maxn;
stacks<node> stack;
read(maxn);
node *prev=new node[maxn+1];
for(int iter=1;iter<=maxn;iter++){
read(prev[iter].number);
prev[iter].identity=iter;
while(stack.size()&&stack.top().number<prev[iter].number){
prev[stack.top().identity].point=prev[iter].identity;
stack.pop();
};
stack.push(prev[iter]);
};
for(int iter=1;iter<=maxn;iter++){
write(prev[iter].point);
putchar(' ');
};
return 0;
};
这是STL stack,全部AC。
#include<cstdio>
template<typename type>
class stacks{
private:
type *prev=new type;
int size=0;
public:
void push(const type &value){
prev[++size]=value;
};
void pop(void){
if(size==0){
return;
};
--size;
};
int length(void){
return size;
};
type top(void){
if(size==0){
return type();
};
return prev[size];
};
};
struct node{
int number=0,identity=0,point=0;
};
void read(int &input){
input=0;
int minus=1;
char got=getchar();
while('9'<got||got<'0'){
if(got=='-'){
minus=-1;
};
got=getchar();
};
while('0'<=got&&got<='9'){
input=input*10+got-'0';
got=getchar();
};
input*=minus;
};
void write(const int &output){
if(output<0){
putchar('-');
};
if(output>9){
write(output/10);
};
putchar(output%10+'0');
};
int main(int argc,char **argv){
int maxn;
stacks<node> stack;
read(maxn);
node *prev=new node[maxn+1];
for(int iter=1;iter<=maxn;iter++){
read(prev[iter].number);
prev[iter].identity=iter;
while(stack.length()&&stack.top().number<prev[iter].number){
prev[stack.top().identity].point=prev[iter].identity;
stack.pop();
};
stack.push(prev[iter]);
};
for(int iter=1;iter<=maxn;iter++){
write(prev[iter].point);
putchar(' ');
};
return 0;
};
这是手写stack,1~3AC,5TLE,其余RE。