Submission #1203883


Source Code Expand

#include<vector>
#include<cmath>
#include<map>
#include<cstdlib>
#include<iostream>
#include<sstream>
#include<fstream>
#include<string>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<set>
#include<stack>
#include<bitset>
#include<functional>
#include<ctime>
#include<queue>
#include<deque>
#include<complex>
#include<cassert>
using namespace std;
#define pb push_back
#define pf push_front
typedef long long lint;
typedef complex<double> P;
#define mp make_pair
#define fi first
#define se second
typedef pair<int,int> pint;
#define All(s) s.begin(),s.end()
#define rAll(s) s.rbegin(),s.rend()
#define REP(i,a,b) for(int i=a;i<b;i++)
#define rep(i,n) REP(i,0,n)
ostream &operator<<(ostream &os, const pint &a) { os << "(" << a.fi << "," << a.se << ")"; return os; }
ostream &operator<<(ostream &os, const vector<int> &a) {
	os<<"[";
	rep(i,a.size()){
		os<<a[i];
		if(i<a.size()-1) os<<",";
	}
	os<<"]";
	return os; 
}
#define maxv 3641919
vector<int> gr[maxv],rgr[maxv];
vector<int> vs;
bool sumi[maxv];
int cmp[maxv];
void dfs(int v){
	sumi[v]=true;
	rep(i,gr[v].size()){
		if(!sumi[gr[v][i]]) dfs(gr[v][i]);
	}
	vs.pb(v);
}
void rdfs(int v,int k){
	sumi[v]=true;cmp[v]=k;
	rep(i,rgr[v].size()){
		if(!sumi[rgr[v][i]]) rdfs(rgr[v][i],k);
	}
}
int scc(int v)
{
	memset(sumi,false,sizeof(sumi));
	vs.clear();
	rep(i,v){
		if(!sumi[i]) dfs(i);
	}
	memset(sumi,false,sizeof(sumi));
	int k=0;
	for(int i=vs.size()-1;i>=0;i--){
		if(!sumi[vs[i]]) rdfs(vs[i],k++);
	}
	return k;
}
void aedge(int v,int w){
	//cout<<v<<' '<<w<<endl;
	gr[v].pb(w);
	rgr[w].pb(v);
}
#define N 65536
int act[2][N*2+10];
//[a,b)にvから辺を貼る
void query(int a,int b,int v,int id,int k=0,int l=0,int r=N){
	//REP(i,a,b) aedge(v,i+2*n+N-1);return;
	if(r<=a || b<=l) return;
	if(a<=l && r<=b){
		//cout<<k<<endl;
		aedge(v,act[id][k]);return;
	}
	query(a,b,v,id,k*2+1,l,(l+r)/2);
	query(a,b,v,id,k*2+2,(l+r)/2,r);
}
int n;
//(id,x)に点yを貼る
void ap(int id,int x,int y){
	int k=x+N-1,pre=y;
	while(1){
		int np=n;n++;
		aedge(np,pre);
		aedge(np,act[id][k]);
		act[id][k]=np;
		pre=act[id][k];
		if(k<1) break;
		k=(k-1)/2;
	}
}
int l[51419],r[51419];
int pos[2][51419];
vector<pint> V[2];
int num[maxv],dp[maxv];
vector<int> ed[maxv];
int cal(int v){
	if(dp[v]>=0) return dp[v];
	int ret=0;
	rep(i,ed[v].size()){
		//cout<<v<<' '<<(*it)<<endl;
		if(v!=ed[v][i]) ret=max(ret,cal((ed[v][i])));
	}
	//cout<<v<<' '<<dp[v]<<endl;
	return dp[v]=ret+num[v];
}
int main()
{
	int m;
	cin>>m;
	rep(i,m) cin>>l[i];
	rep(i,m) cin>>r[i];
	rep(i,m) V[0].pb(mp(l[i]-i,i)),V[1].pb(mp(l[i]+i,i));
	sort(All(V[0]));sort(All(V[1]));
	rep(i,2) rep(j,m) pos[i][V[i][j].se]=j;
	
	n=m;
	rep(i,N*2-1){act[0][i]=n;n++;}
	rep(i,N*2-1){act[1][i]=n;n++;}
	REP(i,1,N*2-1) aedge(act[0][(i-1)/2],act[0][i]),aedge(act[1][(i-1)/2],act[1][i]);
	rep(i,m){
		query(0,lower_bound(All(V[0]),mp(r[i]-i,114514))-V[0].begin(),i,0);
		ap(0,pos[0][i],i);
		//cout<<i<<' '<<lower_bound(All(V[0]),mp(r[i]-i,114514))-V[0].begin()<<' '<<pos[0][i]<<endl;
	}
	for(int i=m-1;i>=0;i--){
		query(1,lower_bound(All(V[1]),mp(r[i]+i,114514))-V[1].begin(),i,1);
		ap(1,pos[1][i],i);
		//cout<<i<<' '<<lower_bound(All(V[1]),mp(r[i]-i,114514))-V[1].begin()<<' '<<pos[1][i]<<endl;
	}
	//rep(i,n) cout<<i<<' '<<gr[i]<<endl;
	
	int v=scc(n),out=0;
	memset(num,0,sizeof(num));memset(dp,-1,sizeof(dp));
	rep(i,m) num[cmp[i]]++;
	rep(i,n) rep(j,gr[i].size()) ed[cmp[i]].pb(cmp[gr[i][j]]);
	/*rep(i,v){
		if(ed[i].size()>0){
			sort(All(ed[i]));
			ed[i].erase(unique(All(ed[i])),ed[i].end());
		}
	}*/
	//rep(i,n) cout<<i<<' '<<cmp[i]<<endl;
	rep(i,v) out=max(out,cal(i));
	/*rep(i,v){
		vector<int> vv(ed[i].begin(),ed[i].end());
		cout<<i<<' '<<vv<<' '<<num[i]<<endl;
	}*/
	cout<<out<<endl;
}

Submission Info

Submission Time
Task E - 遊園地
User sky58
Language C++14 (GCC 5.4.1)
Score 0
Code Size 3900 Byte
Status WA
Exec Time 1707 ms
Memory 514952 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 1200
Status
AC × 3
AC × 27
WA × 9
Set Name Test Cases
Sample sample1.txt, sample2.txt, sample3.txt
All in1.txt, in10.txt, in11.txt, in12.txt, in13.txt, in14.txt, in15.txt, in16.txt, in17.txt, in18.txt, in19.txt, in2.txt, in20.txt, in21.txt, in22.txt, in23.txt, in24.txt, in25.txt, in26.txt, in27.txt, in28.txt, in29.txt, in3.txt, in30.txt, in31.txt, in32.txt, in33.txt, in4.txt, in5.txt, in6.txt, in7.txt, in8.txt, in9.txt, sample1.txt, sample2.txt, sample3.txt
Case Name Status Exec Time Memory
in1.txt AC 1615 ms 513804 KB
in10.txt WA 1620 ms 512648 KB
in11.txt AC 1303 ms 499424 KB
in12.txt WA 1250 ms 498784 KB
in13.txt AC 1221 ms 501216 KB
in14.txt WA 1230 ms 499040 KB
in15.txt AC 1318 ms 498144 KB
in16.txt AC 1402 ms 496864 KB
in17.txt WA 1405 ms 496224 KB
in18.txt WA 1489 ms 496328 KB
in19.txt AC 1466 ms 496328 KB
in2.txt AC 1608 ms 513548 KB
in20.txt WA 1447 ms 496992 KB
in21.txt AC 1225 ms 502756 KB
in22.txt AC 1173 ms 504804 KB
in23.txt AC 1239 ms 507108 KB
in24.txt AC 1252 ms 506724 KB
in25.txt AC 1224 ms 503012 KB
in26.txt AC 167 ms 309492 KB
in27.txt AC 168 ms 309492 KB
in28.txt AC 167 ms 309492 KB
in29.txt AC 1591 ms 514400 KB
in3.txt AC 1608 ms 513672 KB
in30.txt AC 1707 ms 514144 KB
in31.txt AC 1674 ms 514424 KB
in32.txt AC 1695 ms 514612 KB
in33.txt WA 1698 ms 514656 KB
in4.txt WA 1634 ms 513420 KB
in5.txt AC 1613 ms 514952 KB
in6.txt AC 1605 ms 513804 KB
in7.txt AC 1512 ms 513288 KB
in8.txt WA 1623 ms 513544 KB
in9.txt AC 1528 ms 513288 KB
sample1.txt AC 164 ms 309492 KB
sample2.txt AC 167 ms 309492 KB
sample3.txt AC 165 ms 309492 KB