PAT T1026 String of Colorful Beads

双下标法寻找最长不重复子串~

#include<bits/stdc++.h>
using namespace std;
const int maxn=10014;
int a[maxn],w[maxn];
int main () {
    int n;
    scanf ("%d",&n);
    for (int i=1;i<=n;i++) scanf ("%d",&w[i]);
    for (int i=0;i<n;i++) scanf ("%d",&a[i]);
    unordered_map<int,int> pos;
    int temp=0,ans=0,left=-1,right=-1;
    int st=0,ed=0;
    while (st<n) {
        while (ed<=n) {
            if (ed==n||pos[a[ed]]!=0) {
                if (ed-st>right-left+1||(ed-st==right-left+1&&temp>ans)) {
                    ans=temp;
                    left=st;
                    right=ed-1;
                }
                break;
            }
            pos[a[ed]]=1;
            temp+=w[a[ed]];
            ed++;
        }
        pos[a[st]]=0;
        temp-=w[a[st]];
        st++;
    }
    printf ("%d %d %d",ans,left,right);
    return 0;
}

 

posted @ 2020-02-14 21:37  zlc0405  阅读(157)  评论(0编辑  收藏  举报