5.19

今天是开通博客的第一天,以后加油了。(你所做的事情,也许暂时看不到成果,但不要灰心或焦虑,你不是没有成长,而是在扎根。)

/*
#include<bits/stdc++.h>
using namespace std;
const int N=1e6;
#define ll long long  //定义
stack<int>ak;//定义栈
sk.push(a);//a入栈顶
sk.top();//返回栈顶元素
sk.pop();//删除栈顶元素
sk.empty();//是否为空
sk.size();//元素个数 

queue<int>q;//定义队列
q.push(a);//a入队列
q.front();//返回队首元素
q.back();//返回队尾元素 
q.pop();//删除队首元素
q.empty();//是否为空
q.size();//元素个数 

set<int>se;//定义集合
se.insert(a);//a入集合
se.erase(a);//删除a;
se.clear();//清空
se.empty();//是否为空
se.size();//元素个数
se.find(a);//返回一个迭代器,指向键值a;
se.lower_bound(a)//返回一个迭代器,指向键值不小于a的第一个元素;
se.upper_bound(a)//返回一个迭代器,指向键值大于a的第一个元素;
set<int>::iterator it//定义迭代器
for(it=u[a].begin();it!=u[a].end();it++)
if (u[b].find(*it)!=u[b].end())Nc++;//两集合都有的元素为Nc个 

map<int,int>mp;//定义 

并查集
#include<bits/stdc++.h>
using namespace std;
const int N=3015;
struct t{
    int x,y,z;
}s[N];
int n,m,i,f[N];
int cmp(t a,t b){
    return a.z<b.z;
}
int F(int x){
    if(f[x]==x)return x;
    else return f[x]=F(f[x]);
}
int main()
{
    int sum=0,cnt=0;
    for(i=0;i<N;i++)f[i]=i;
    cin>>n>>m;
    for(i=0;i<m;i++)cin>>s[i].x>>s[i].y>>s[i].z;
    sort(s,s+m,cmp);
    for(i=0;i<m;i++){
        if(F(s[i].x)!=F(s[i].y)){
            f[F(s[i].y)]=F(s[i].x);//换元素试试
            sum+=s[i].z;
            cnt++;
        }
    }
    if(cnt==n-1)cout<<sum<<endl;
    else cout<<-1;
    return 0;
}//7分钟 


最小生成树
#include<bits/stdc++.h>
using namespace std;
const int MAX=1<<30,N=505;
int a[N][N][2],b[N][2],c[N];
int n,m,s,d,i,j;
void F()
{
    c[s]=1;
    b[s][0]=b[s][1]=0;
    while(1){
        int min=MAX,t;
        for(i=0;i<n;i++){
            if(!c[i]&&b[i][0]<min){
                min=b[i][0];
                t=i;
            }
        }
        if(t==d||min==MAX)break;
        c[t]=1;
        for(i=0;i<n;i++){
            if(!c[i]&&b[i][0]>b[t][0]+a[t][i][0]){
                b[i][0]=b[t][0]+a[t][i][0];
                b[i][1]=b[t][1]+a[t][i][1];
            }
            else if(!c[i]&&b[i][0]==b[t][0]+a[t][i][0]){
                if(b[i][1]>b[t][1]+a[t][i][1])
                b[i][1]=b[t][1]+a[t][i][1];
            }
        }
    } 
}
int main()
{
    cin>>n>>m>>s>>d;
    for(i=0;i<N;i++){
        for(j=0;j<N;j++)a[i][j][0]=MAX;
        b[i][0]=MAX;
    }
    for(i=0;i<m;i++){
        int x,y,l,q;
        cin>>x>>y>>l>>q;
        a[x][y][0]=a[y][x][0]=l;
        a[x][y][1]=a[y][x][1]=q;
    }
    for(i=0;i<n;i++){
        if(a[s][i][0]<MAX){
            b[i][0]=a[s][i][0];
            b[i][1]=a[s][i][1];
        }
    }
    F();
    cout<<b[d][0]<<" "<<b[d][1];
    return 0;
 } //10分钟 

 01背包
 #include<bits/stdc++.h>
using namespace std;
const int N=1005;
int kj[N],jz[N],jg[N];
int main()
{
    int n,m,i,j;
    cin>>n>>m;
    for(i=1;i<=n;i++)cin>>kj[i]>>jz[i];
    for(i=1;i<=n;i++)for(j=m;j>=kj[i];j--)jg[j]=max(jg[j],jg[j-kj[i]]+jz[i]);
    cout<<jg[m];
    return 0;
 } 


int main()
{
    return 0;
}

*/ 
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+2;
int n,a[N],ma[N],st[N];
int main()
{
    int i,top=0;
    cin>>n;
    for(i=0;i<n;i++)cin>>a[i];
    for(i=n;i;i--)ma[i]=max(ma[i+1],a[i]);
    for(i=0;i<n;i++){
        st[++top]=a[i];
        while(top&&st[top]>ma[i+1]){
            cout<<st[top--]<<" ";
        }
    }
    return 0;
}

图片说明

全部评论

相关推荐

仁者伍敌:服务员还要脱颖而出,这是五星级酒店吗
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务