2 条题解

  • 1
    @ 2023-5-26 23:16:32
    #include<iostream>
    #include<stack>
    #define IO ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
    #define int long long
    using namespace std;
    int n,h[50005],v[50005],s[50005],maxx=-1;
    stack<int> st;
    signed main(){
        IO;
        cin>>n;
        for(int i=1;i<=n;i++){
            cin>>h[i]>>v[i];
            //左边
            while(!st.empty()&&h[st.top()]<=h[i]) st.pop();
            if(!st.empty()) s[st.top()]+=v[i];
            st.push(i);
        }while(!st.empty()) st.pop();for(int i=n;i>=1;i--){
            //右边
            while(!st.empty()&&h[st.top()]<=h[i]) st.pop();
            if(!st.empty()) s[st.top()]+=v[i];
            st.push(i);
        }for(int i=1;i<=n;i++) maxx=max(maxx,s[i]);
        cout<<maxx;
        return 0;
    }
    
    • 0
      @ 2023-5-19 19:46:37

      此题有点让我无法形容

      #include<iostream>
      #include<cstdio>
      #include<cstring>
      #include<algorithm>
      using namespace std;
      int const xn=50005;
      int n,h[xn],v[xn],sta[xn],top,s[xn];
      int rd()
      {
        int ret=0,f=1; char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=0; ch=getchar();}
        while(ch>='0'&&ch<='9')ret=(ret<<3)+(ret<<1)+ch-'0',ch=getchar();
        return f?ret:-ret;
      }
      int main()
      {
        n=rd();
        for(int i=1;i<=n;i++)
          {
            h[i]=rd(),v[i]=rd();
            while(top&&h[sta[top]]<=h[i])top--;
            if(top)s[sta[top]]+=v[i];
            sta[++top]=i;
          }
        top=0;
        for(int i=n;i;i--)
          {
            while(top&&h[sta[top]]<=h[i])top--;
            if(top)s[sta[top]]+=v[i];
            sta[++top]=i;
          }
        int mx=0;
        for(int i=1;i<=n;i++)mx=max(mx,s[i]);
        printf("%d\n",mx);
        return 0;
      }
      
      
      • 1

      信息

      ID
      2498
      时间
      1000ms
      内存
      256MiB
      难度
      8
      标签
      递交数
      20
      已通过
      7
      上传者