Submission #140139

#TimeUsernameProblemLanguageResultExecution timeMemory
140139asifthegreatDifference (POI11_roz)C++14
50 / 100
1086 ms8508 KiB
#include <bits/stdc++.h>
#define pii pair<int,int>

#ifdef LOCAL
bool local = true;
#else
bool local = false;
#endif
using namespace std;


const int N = 1000005;
char s[N];

vector<int>occ[27];


int find_max(int n,const vector<int> &v){
	vector<int>pref(n+1);
	vector<int>pref_min(n+1);
	//for(int i = 1; i <= n;i++)cout << v[i] << " ";cout << endl;
	for(int i = 1; i <= n;i++){
		pref[i]=pref[i-1]+v[i];
		pref_min[i] = min(pref_min[i-1],pref[i]);
	}
	//for(int i = 1; i <= n;i++)cout << pref_min[i] << " ";cout << endl;//
	int last = -1,ans = 0;
	for(int i = 1; i <= n;i++){
		if(v[i] == -1)last = i;
		else if(last != -1){
			ans = max(ans,pref[i]-pref_min[last-1]);
		}
	}
	return ans;
}


int calc(const vector<int>&a, const vector<int>&b){
	if(a.empty() || b.empty())return 0;
	int size1 = a.size(),size2 = b.size();
	// for(auto i: a)cout << i << " ";cout << endl;
	// for(auto i: b)cout << i << " ";cout << endl;
 
	vector<int>v(size1+size2+5);
	int i = 0,j = 0,k = 1;
	while(1){
		if(k == size1+size2+1)break;
		if(i == size1){
			v[k++] = +1;j++;//continue; 
		}
		else if(j == size2){
			v[k++] = -1;i++;
			//continue;
		}
		else{
			if(a[i] < b[j]){
				v[k++] = -1;
				i++;
			}
			else{
				v[k++] = +1;
				j++;
			}
		}
		
		//cout << i << " " << j << " " << k << endl;
	}
	int n = size1+size2;
	//cout << n << endl;
	//for(int i =1; i <= n;i++)cout << v[i] << " ";cout << endl;
	/// v is an array with 1, -1 starting index = 1
	int ans = find_max(n,v);
	return ans;
}


int main(int argc, char const *argv[])
{
	int n;
	scanf("%d",&n);
	scanf("%s",s);
	for(int i = 0; i < n; i++){
		occ[(int)(s[i]-'a')].push_back(i);
	}
	int ans = 0;

	//ans = calc(occ[7],occ[5]);



	 for(int i = 0; i < 26;i++){
	 	for(int j = 0; j < 26;j++){
	// 		if(calc(occ[i],occ[j]) == 2){
	 //			cout << (char)('a'+i) <<" " << (char)('a'+j) << " " << i << " " << j <<  endl;
	// 		}
	 		if(i != j)ans = max(ans,calc(occ[i],occ[j]));
	 	}
	 }
	printf("%d\n", ans);

	return 0;
}

Compilation message (stderr)

roz.cpp: In function 'int main(int, const char**)':
roz.cpp:80:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d",&n);
  ~~~~~^~~~~~~~~
roz.cpp:81:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%s",s);
  ~~~~~^~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...