답안 #1039376

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1039376 2024-07-30T19:25:10 Z 1L1YA 사다리꼴 (balkan11_trapezoid) C++17
28 / 100
85 ms 32816 KB
//1L1YA

#include<bits/stdc++.h>
using namespace std;

//#pragma GCC optimize ("O3,unrool-loops")
//#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")

typedef long long       ll;
typedef pair<ll,ll>     pll;
typedef pair<int,int>   pii;

#define Pb              push_back
#define F               first
#define S               second
#define endl            '\n'
#define sep             ' '
#define all(x)          x.begin(),x.end()
#define al(x,n)         x+1,x+n+1
#define SZ(x)           ((int)x.size())
#define lc              (id<<1)
#define rc              (lc|1)
#define mid             (l+r>>1)
#define dokme(x)        cout << x << endl, exit(0)
#define sik(x)          cout << x << endl;continue;
#define FastIO          ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define FileIO          freopen("input.txt","r",stdin);freopen("output.txt","w",stdout);

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

const ll oo=1e18;
const int mod=1e9+7;
const int inf=1e9+111;
const int N=1e5+11;
const int lg=23;

int n,m,a[N],b[N],c[N],d[N];
pii dp[N],fen[N<<1];
vector<int> vc1[N],vc2[N];

void upd(int x,pii y){
	for(;x<=m;x+=x&-x)
		if(y.F>fen[x].F)	fen[x]=y;
		else if(y.F==fen[x].F)	fen[x].S+=y.S;
}

pii get(int x){
	pii ans={0,1};
	for(;x;x-=x&-x)
		if(fen[x].F>ans.F)	ans=fen[x];
		else if(fen[x].F==ans.F)	ans.S+=fen[x].S;
	return ans;
}

int main(){
	FastIO

	cin >> n;
	vector<int> comp;
	for(int i=1;i<=n;i++){
		cin >> a[i] >> b[i] >> c[i] >> d[i];
		comp.Pb(a[i]);comp.Pb(b[i]);comp.Pb(c[i]);comp.Pb(d[i]);
	}
	sort(all(comp));
	comp.resize(unique(all(comp))-comp.begin());
	m=SZ(comp);
	for(int i=1;i<=n;i++){
		a[i]=lower_bound(all(comp),a[i])-comp.begin()+1;
		b[i]=lower_bound(all(comp),b[i])-comp.begin()+1;
		c[i]=lower_bound(all(comp),c[i])-comp.begin()+1;
		d[i]=lower_bound(all(comp),d[i])-comp.begin()+1;
		vc1[a[i]].Pb(i);
		vc2[b[i]].Pb(i);
	}
	for(int i=1;i<=m;i++)	fen[i]={0,0};
	for(int i=1;i<=m;i++){
		for(int j: vc1[i])	dp[j]=get(c[j]-1),dp[j].F++;
		for(int j: vc2[i])	upd(d[j],dp[j]);
	}
	cout << get(m).F << sep << get(m).S << endl;

	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 4952 KB Output is correct
2 Correct 2 ms 4956 KB Output is correct
3 Partially correct 2 ms 5208 KB Partially correct
4 Partially correct 2 ms 5212 KB Partially correct
5 Partially correct 5 ms 5468 KB Partially correct
6 Partially correct 4 ms 5532 KB Partially correct
7 Partially correct 5 ms 5720 KB Partially correct
8 Partially correct 8 ms 5720 KB Partially correct
9 Partially correct 10 ms 6624 KB Partially correct
10 Partially correct 16 ms 7892 KB Partially correct
11 Partially correct 25 ms 9044 KB Partially correct
12 Runtime error 50 ms 24716 KB Execution killed with signal 11
13 Runtime error 59 ms 26688 KB Execution killed with signal 11
14 Runtime error 54 ms 25076 KB Execution killed with signal 11
15 Runtime error 71 ms 28252 KB Execution killed with signal 11
16 Runtime error 72 ms 29548 KB Execution killed with signal 11
17 Runtime error 60 ms 26068 KB Execution killed with signal 11
18 Runtime error 85 ms 32816 KB Execution killed with signal 11
19 Runtime error 85 ms 30336 KB Execution killed with signal 11
20 Runtime error 65 ms 26320 KB Execution killed with signal 11