QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#638794#4929. Longest Unfriendly Subsequenceyjs_0 9ms19620kbC++142.9kb2024-10-13 16:56:502024-10-13 16:56:52

Judging History

你现在查看的是最新测评结果

  • [2024-10-13 16:56:52]
  • 评测
  • 测评结果:0
  • 用时:9ms
  • 内存:19620kb
  • [2024-10-13 16:56:50]
  • 提交

answer

#include<iostream>
#include<vector>
#include<algorithm>
#include<cstring>
#define int ll
#define lc (rt<<1)
#define rc (rt<<1|1)
#define mid (l+r>>1)
#define rg register
#define pb push_back
#define ppb pop_back
#define mkp make_pair
#define prq_mn(x) priority_queue<x, vector<x>, greater<x> >
#define prq_mx(x) priority_queue<x, vector<x>, less<x> >
#define Clear(x, y) memset(x, y, (n+10)*sizeof(int))
#define fi first
#define se second
#define DEBUG printf("Debug on line %d\n", __LINE__)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
const int N = 2e5 + 114514;
const int INF = 0x3f3f3f3f;
const int inf = 0xcfcfcfcf;

template <typename T> bool updmax(T& a, T b) {return a<b ? a=b, 1 : 0;}
template <typename T> bool updmin(T& a, T b) {return a>b ? a=b, 1 : 0;}

inline int read(){
	int n=0, f=1; char ch = getchar();
	for(; !isdigit(ch); ch=getchar()) if(ch == '-') f=-1;
	for(; isdigit(ch); ch=getchar()) n=n*10+ch-'0';
	return n*f;
}

int T;
int n, m;
int a[N];
vector<int> vec; 
int mx[N], mxk[N], smx[N], smxk[N];
int lst[N], tp;

void addlst(int x){
	for(int i=tp; i>=max(tp-9, 0ll); i--){
		if(lst[i] == x){ // 找到相同的 
			for(int j=i; j<tp; j++) lst[j] = lst[j+1];
			lst[tp] = x;
			return;
		}
	}
	
	// 没找到相同的 
	lst[++tp] = x;
} 

void upd1(int y, int val, int k){
//	printf("upd1(%d, %d, %d, %d, %d)\n", x, y, val, k);
	if(val > mx[y]){
		smx[y] = mx[y];
		smxk[y] = mxk[y];
		mx[y] = val;
		mxk[y] = k;
	} else if(k != mxk[y] && val > smx[y]){
		smx[y] = val;
		smxk[y] = k;
	}
}

void upd(int y1, int y2, int val, int ii){
//	printf("upd(%d, %d, %d, %d, %d, %d)\n", x1, y1, x2, y2, val, ii);
	if(!val || mxk[y2] != a[ii]) upd1(y1, mx[y2]+val, val ? y2 : mxk[y2]);
	if(!val || smxk[y2] != a[ii]) upd1(y1, smx[y2]+val, val ? y2 : smxk[y2]);
}

signed main(){
	T = read();
	while(T--){
		vec.clear();
		
		n = read();
		for(int i=1; i<=n; i++){
			a[i] = read();
			vec.pb(a[i]);
		}
		
		sort(vec.begin(), vec.end());
		vec.erase(unique(vec.begin(), vec.end()), vec.end());
		m = vec.size();
		for(int i=1; i<=n; i++){
			a[i] = lower_bound(vec.begin(), vec.end(), a[i]) - vec.begin() + 1;
//			printf("a[%d] = %d\n", i, a[i]);
		}
		
		Clear(mx, inf); Clear(mxk, inf); Clear(smx, inf); Clear(smxk, inf);
		Clear(lst, 0);
		tp = 0;
		mx[0] = 0; mxk[0] = 0;
		for(int i=1; i<=n; i++){
			for(int jj=tp; jj>=max(tp-9, 0ll); jj--){
				int j = lst[jj];
				if(a[i] != j) upd(a[i], j, 1, i);
			}
			addlst(a[i]);
			
//			for(int j=0; j<=m; j++){
//				printf("mx[%d][%d] = %d\n", i, j, mx[j]);
//				printf("mxk[%d][%d] = %d\n", i, j, mxk[j]);
//				printf("smx[%d][%d] = %d\n", i, j, smx[j]);
//				printf("smxk[%d][%d] = %d\n", i, j, smxk[j]);
//			}
		}
		
		int ans = inf;
		for(int j=0; j<=m; j++){
			ans = max(ans, mx[j]);
		}
		printf("%lld\n", ans);
	}
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 0
Wrong Answer
time: 8ms
memory: 19620kb

input:

1
200000
259021863 259021863 259021863 259021863 259021863 259021863 259021863 259021863 259021863 259021863 259021863 259021863 259021863 259021863 259021863 259021863 259021863 259021863 259021863 259021863 259021863 259021863 259021863 259021863 259021863 259021863 259021863 259021863 259021863 2...

output:

3486502863

result:

wrong answer 1st lines differ - expected: '1', found: '3486502863'

Subtask #2:

score: 0
Wrong Answer

Test #15:

score: 0
Wrong Answer
time: 0ms
memory: 14084kb

input:

3
5
1 2 1 2 1
7
1 2 3 2 1 2 3
8
1 10 10 1 1 100 100 1

output:

3486502863
3486502863
3486502863

result:

wrong answer 1st lines differ - expected: '2', found: '3486502863'

Subtask #3:

score: 0
Wrong Answer

Test #19:

score: 0
Wrong Answer
time: 2ms
memory: 14036kb

input:

1
500
537076440 691668159 871942500 537076440 537076440 691668159 871942500 871942500 537076440 691668159 871942500 537076440 691668159 871942500 537076440 691668159 871942500 537076440 691668159 871942500 537076440 691668159 871942500 871942500 537076440 691668159 871942500 537076440 537076440 6916...

output:

3486502863

result:

wrong answer 1st lines differ - expected: '361', found: '3486502863'

Subtask #4:

score: 0
Wrong Answer

Test #79:

score: 0
Wrong Answer
time: 9ms
memory: 19376kb

input:

1
200000
1 3 3 2 2 3 3 1 2 3 1 1 3 3 3 2 1 1 2 3 2 1 3 3 3 1 2 2 1 3 1 2 1 2 3 2 3 3 2 2 3 2 3 2 3 1 1 1 1 1 3 1 3 2 3 3 3 3 1 3 2 1 3 2 3 2 3 1 1 1 1 3 3 2 3 2 1 2 2 3 2 3 2 2 2 2 2 2 3 2 1 2 2 1 1 3 2 1 2 1 1 3 3 3 2 1 2 2 2 1 3 3 2 3 2 1 3 3 2 2 1 3 1 3 2 1 2 3 2 1 2 3 2 2 3 2 1 2 1 1 1 1 1 1 1 3...

output:

3486502863

result:

wrong answer 1st lines differ - expected: '66691', found: '3486502863'

Subtask #5:

score: 0
Skipped

Dependency #4:

0%

Subtask #6:

score: 0
Skipped

Dependency #3:

0%

Subtask #7:

score: 0
Skipped

Dependency #1:

0%