QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#638582#4929. Longest Unfriendly Subsequencejinzikai3140 24ms16200kbC++143.0kb2024-10-13 16:17:492024-10-13 16:17:50

Judging History

This is the latest submission verdict.

  • [2024-10-13 16:17:50]
  • Judged
  • Verdict: 0
  • Time: 24ms
  • Memory: 16200kb
  • [2024-10-13 16:17:49]
  • Submitted

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) memset(x, -INF, n*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 + 5;
const int INF = 0x3f3f3f3f;

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[2][N], mxk[2][N], smx[2][N], smxk[2][N];

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

void upd(int x1, int y1, int x2, int y2, int val, int ii){
//	printf("upd(%d, %d, %d, %d, %d, %d)\n", x1, y1, x2, y2, val, ii);
	if(!val || mxk[x2][y2] != a[ii]) upd1(x1, y1, mx[x2][y2]+val, val ? y2 : mxk[x2][y2]);
	if(!val || smxk[x2][y2] != a[ii]) upd1(x1, y1, smx[x2][y2]+val, val ? y2 : smxk[x2][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[0]); Clear(mxk[0]); Clear(smx[0]); Clear(smxk[0]);
		Clear(mx[1]); Clear(mxk[1]); Clear(smx[1]); Clear(smxk[1]);
		mx[0][0] = 0;
		mxk[0][0] = 0;
		for(int ii=1; ii<=n; ii++){
			int i=ii&1, lst = (ii-1)&1;
			for(int j=0; j<=m; j++){
//				f[i][j][k] = max(f[i][j][k], f[lst][j][k]);
//				if(a[ii]!=j && a[ii]!=k) f[i][a[ii]][j] = max(f[i][a[ii]][j], f[lst][j][k] + 1);
				upd(i, j, lst, j, 0, -1);
				if(a[ii]!=j) upd(i, a[ii], lst, j, 1, ii);
			}
			
			Clear(mx[lst]); Clear(mxk[lst]); Clear(smx[lst]); Clear(smxk[lst]);
//			for(int j=0; j<=m; j++){
//				printf("mx[%d][%d] = %d\n", ii, j, mx[i][j]);
//				printf("mxk[%d][%d] = %d\n", ii, j, mxk[i][j]);
//				printf("smx[%d][%d] = %d\n", ii, j, smx[i][j]);
//				printf("smxk[%d][%d] = %d\n\n", ii, j, smxk[i][j]);
//			}
		}
		
		int ans = -INF;
		for(int j=0; j<=m; j++){
			ans = max(ans, mx[n&1][j]);
		}
		printf("%lld\n", ans);
	}
}

/*
1
10
2 1 2 2 1 2 1 2 3 2 
*/

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Time Limit Exceeded

Test #1:

score: 0
Time Limit Exceeded

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:


result:


Subtask #2:

score: 0
Wrong Answer

Test #15:

score: 6
Accepted
time: 0ms
memory: 16200kb

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:

2
6
4

result:

ok 3 lines

Test #16:

score: 0
Wrong Answer
time: 24ms
memory: 14104kb

input:

28653
6
372076545 832760265 372076545 644300403 644300403 644300403
8
540046638 375129642 863244619 863244619 375129642 540046638 540046638 540046638
6
142783193 508154499 871683432 71368434 871683432 871683432
8
760894385 984189193 760894385 323542350 984189193 760894385 323542350 323542350
6
84093...

output:

3
4
4
6
4
4
3
4
5
4
5
4
2
4
5
5
4
3
5
5
4
4
4
5
6
4
2
3
4
3
2
3
4
3
8
4
5
5
4
6
4
5
5
5
4
6
6
4
3
3
7
5
3
7
3
4
6
6
5
4
3
3
6
3
6
4
3
4
4
7
3
4
5
4
5
1
3
6
4
4
4
4
2
3
4
2
5
3
4
2
2
3
4
3
6
3
5
3
4
5
3
3
4
4
5
3
5
4
4
6
5
6
6
4
5
4
5
5
3
4
3
4
4
2
4
4
6
5
4
3
3
2
3
5
4
5
3
3
4
7
4
5
5
2
5
2
4
4
5
4
...

result:

wrong answer 411th lines differ - expected: '2', found: '5'

Subtask #3:

score: 0
Wrong Answer

Test #19:

score: 8
Accepted
time: 0ms
memory: 16136kb

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:

361

result:

ok single line: '361'

Test #20:

score: 8
Accepted
time: 0ms
memory: 16120kb

input:

1
500
584142119 101442702 335815880 584142119 101442702 335815880 584142119 101442702 335815880 584142119 101442702 335815880 584142119 101442702 101442702 335815880 335815880 584142119 584142119 101442702 101442702 335815880 584142119 101442702 335815880 584142119 101442702 335815880 584142119 1014...

output:

394

result:

ok single line: '394'

Test #21:

score: 0
Wrong Answer
time: 1ms
memory: 14164kb

input:

1
500
296341737 806184542 989331127 989331127 296341737 806184542 455929030 296341737 806184542 806184542 806184542 989331127 296341737 806184542 989331127 296341737 806184542 989331127 296341737 806184542 989331127 296341737 806184542 806184542 989331127 296341737 296341737 296341737 806184542 9893...

output:

321

result:

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

Subtask #4:

score: 0
Time Limit Exceeded

Test #79:

score: 0
Time Limit Exceeded

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:


result:


Subtask #5:

score: 0
Skipped

Dependency #4:

0%

Subtask #6:

score: 0
Skipped

Dependency #3:

0%

Subtask #7:

score: 0
Skipped

Dependency #1:

0%