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;
}