AK作业tijie
2024-04-27 19:19:25
发布于:广东
由于我要发的人已经做完T20820了,所以我只发后2题
//T20821
#include<bits/stdc++.h>
using namespace std;
const int maxx=1e5+5;
int n,stk[maxx],top,x,maxn,t,vis[maxx];
long long ans;
void push(int x){
stk[++top]=x;
}
void pop(){
top--;
}
int main(){
cin>>n;
cin>>x;
push(x);
vis[top]=1;
for(int i=2;i<=n;i++){
cin>>x;
long long cnt=0,sum=0;
while(top>0){
// for(int j=t;j<=i;j++){
// ans+=max(0,min(stk[i],stk[t])-stk[j]);
// }
if(stk[top] < x){
if(top==1){
ans+=min(x,stk[top])*(long long)cnt-sum;
}
cnt+=vis[top];
sum+=stk[top]*(long long)vis[top];
pop();
}
else{
ans+=min(x,stk[top])*(long long)cnt-sum;
break;
}
}
push(x);
vis[top]=cnt+1;
}
cout<<ans;
return 0;
}
//T20822
#include<bits/stdc++.h>
using namespace std;
string s;
int stk[100005],vis[100005],top,maxn;
void push(int x){
stk[++top]=x;
}
void pop(){
if(top!=0)top--;
}
int main(){
cin>>s;
// for(int i=0;i<s.size();i++){
// push(i);
// }
for(int i=0;i<s.size();i++){
if(s[i]==')'){
if(!top) continue;
int x=stk[top];
if(s[x]=='('){
vis[x]=vis[i]=1;
pop();
}
}
else{
push(i);
}
}
for(int i=0;i<s.size();i++){
if(vis[i]==1){
int t=0,j;
for(j=i;j<s.size();j++){
if(vis[j]==0) break;
t++;
}
i=j;
maxn=max(t,maxn);
}
}
cout<<maxn;
return 0;
}
好了,这些就是题解,什么思路自己想
这里空空如也
有帮助,赞一个