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