Submission #2141533


Source Code Expand

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> P;
typedef pair<int,P> P1;
typedef pair<P,P> P2;
#define pb push_back
#define mp make_pair
#define eps 1e-7
#define INF 1000000000
#define mod 1000000007
#define fi first
#define sc second
#define rep(i,x) for(int i=0;i<x;i++)
#define repn(i,x) for(int i=1;i<=x;i++)
#define SORT(x) sort(x.begin(),x.end())
#define ERASE(x) x.erase(unique(x.begin(),x.end()),x.end())
#define POSL(x,v) (lower_bound(x.begin(),x.end(),v)-x.begin())
#define POSU(x,v) (upper_bound(x.begin(),x.end(),v)-x.begin())
vector<int>za;
int dp[500005];
int n,q,a[100005],b[100005],c[100005],d[100005],e[100005];
int len[500005],num[500005],gen[500005];
struct segtree{
	int seg[(1<<20)];
	void allinit(){
	    memset(seg,0,sizeof(seg));
	}
	void init(int pos,int val){
		seg[pos+(1<<19)-1] = val;
	}
	void update(int a,int b,int k,int l,int r,int val){
		if(r<a||b<l) return;
		if(a<=l&&r<=b){
			seg[k]+=val;
			return;
		}
		update(a,b,k*2+1,l,(l+r)/2,val);
		update(a,b,k*2+2,(l+r)/2+1,r,val);
	}
	int query(int a,int k,int l,int r){
		if(l==r) return seg[k];
		if(l<=a&&a<=(l+r)/2){
			return seg[k]+query(a,k*2+1,l,(l+r)/2);
		}
		else{
			return seg[k]+query(a,k*2+2,(l+r)/2+1,r);
		}
	}
}seg;
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d%d",&a[i],&b[i]);
		za.pb(a[i]); za.pb(b[i]);
	}
	for(int i=1;i<=n+1;i++){
		scanf("%d",&c[i]);
		za.pb(c[i]);
	}
	scanf("%d",&q);
	for(int i=1;i<=q;i++){
		scanf("%d%d",&d[i],&e[i]);
		za.pb(d[i]); za.pb(e[i]);
	}
	sort(c+1,c+n+2);
	za.pb(-1);
	SORT(za); ERASE(za);
	for(int i=1;i<=n+1;i++){
		c[i] = POSL(za,c[i]);
		num[c[i]] = i;
	}
	vector<P>interval;
	for(int i=1;i<=n;i++){
		a[i] = POSL(za,a[i]);
		b[i] = POSL(za,b[i]);
		gen[a[i]]++;
		if(a[i] > b[i]){
			interval.pb(mp(b[i],a[i]-1));
		}
	}
	for(int i=2;i<za.size();i++) gen[i] += gen[i-1];
	for(int i=1;i<za.size();i++){
		num[i] -= gen[i];
		seg.init(i,num[i]);
	}
	SORT(interval); int nxt = 0;
	rep(i,500005) len[i] = dp[i] = INF;
	priority_queue<int>que;
	int fail = -1;
	for(int i=1;i<za.size();i++){
		while(nxt<interval.size() && interval[nxt].fi == i){
			que.push(interval[nxt].sc);
			nxt++;
		}
		if(seg.query(i,0,0,(1<<19)-1) <= 0) continue;
		while(seg.query(i,0,0,(1<<19)-1) > 0){
			if(que.empty() || que.top()<i){
				fail = i;
				break;
			}
			len[i] = que.top();
			que.pop();
			seg.update(i,len[i],0,0,(1<<19)-1,-1);
		}
		if(fail != -1) break;
	}
	//calc dp[fail]
	seg.allinit();
	for(int i=1;i<za.size();i++){
		seg.init(i,num[i]);
	}
	nxt = 0;
	while(que.size()) que.pop();
	int sum = 0;
	for(int i=1;i<za.size();i++){
		while(nxt<interval.size() && interval[nxt].fi == i){
			que.push(interval[nxt].sc);
			nxt++;
		}
		if(i == fail){
			que.push(za.size()-1);
		}
		if(seg.query(i,0,0,(1<<19)-1) <= 0) continue;
		while(seg.query(i,0,0,(1<<19)-1) > 0){
			if(que.empty() || que.top()<i){
				sum = INF;
				break;
			}
			int x = que.top();
			que.pop();
			seg.update(i,x,0,0,(1<<19)-1,-1);
			sum++;
		}
		if(sum == INF) break;
	}
	if(sum == INF) dp[fail] = INF;
	else{
		dp[fail] = sum-1;
	}
	for(int i=fail-1;i>=1;i--){
		if(len[i] == INF){
			dp[i] = min(dp[i],dp[i+1]);
		}
		else{
			dp[i] = min(dp[i],min(dp[i+1],dp[len[i]+1]-1));
		}
	}
	for(int i=1;i<=q;i++){
		d[i] = POSL(za,d[i]); e[i] = POSL(za,e[i]);
		int sub = min(dp[d[i]],dp[e[i]]+1);
		if(sub<=1e7) printf("%d\n",n+1-sub);
		else puts("-1");
	}
}

Submission Info

Submission Time
Task F - Two Faced Cards
User IH19980412
Language C++14 (GCC 5.4.1)
Score 2000
Code Size 3584 Byte
Status AC
Exec Time 308 ms
Memory 18544 KB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:52:16: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d",&n);
                ^
./Main.cpp:54:28: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d%d",&a[i],&b[i]);
                            ^
./Main.cpp:58:20: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d",&c[i]);
                    ^
./Main.cpp:61:16: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d",&q);
                ^
./Main.cpp:63:28: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d%d",&d[i],&e[i]);
                            ^

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 2000 / 2000
Status
AC × 3
AC × 61
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt
All sample_01.txt, sample_02.txt, sample_03.txt, sample_01.txt, sample_02.txt, sample_03.txt, subtask_1_01.txt, subtask_1_02.txt, subtask_1_03.txt, subtask_1_04.txt, subtask_1_05.txt, subtask_1_06.txt, subtask_1_07.txt, subtask_1_08.txt, subtask_1_09.txt, subtask_1_10.txt, subtask_1_11.txt, subtask_1_12.txt, subtask_1_13.txt, subtask_1_14.txt, subtask_1_15.txt, subtask_1_16.txt, subtask_1_17.txt, subtask_1_18.txt, subtask_1_19.txt, subtask_1_20.txt, subtask_1_21.txt, subtask_1_22.txt, subtask_1_23.txt, subtask_1_24.txt, subtask_1_25.txt, subtask_1_26.txt, subtask_1_27.txt, subtask_1_28.txt, subtask_1_29.txt, subtask_1_30.txt, subtask_1_31.txt, subtask_1_32.txt, subtask_1_33.txt, subtask_1_34.txt, subtask_1_35.txt, subtask_1_36.txt, subtask_1_37.txt, subtask_1_38.txt, subtask_1_39.txt, subtask_1_40.txt, subtask_1_41.txt, subtask_1_42.txt, subtask_1_43.txt, subtask_1_44.txt, subtask_1_45.txt, subtask_1_46.txt, subtask_1_47.txt, subtask_1_48.txt, subtask_1_49.txt, subtask_1_50.txt, subtask_1_51.txt, subtask_1_52.txt, subtask_1_53.txt, subtask_1_54.txt, subtask_1_55.txt
Case Name Status Exec Time Memory
sample_01.txt AC 5 ms 14080 KB
sample_02.txt AC 5 ms 14080 KB
sample_03.txt AC 5 ms 14080 KB
subtask_1_01.txt AC 102 ms 15476 KB
subtask_1_02.txt AC 155 ms 16372 KB
subtask_1_03.txt AC 58 ms 14840 KB
subtask_1_04.txt AC 140 ms 15732 KB
subtask_1_05.txt AC 87 ms 15476 KB
subtask_1_06.txt AC 177 ms 17520 KB
subtask_1_07.txt AC 158 ms 17392 KB
subtask_1_08.txt AC 209 ms 17264 KB
subtask_1_09.txt AC 164 ms 17264 KB
subtask_1_10.txt AC 88 ms 15860 KB
subtask_1_11.txt AC 73 ms 15860 KB
subtask_1_12.txt AC 112 ms 15860 KB
subtask_1_13.txt AC 132 ms 16372 KB
subtask_1_14.txt AC 70 ms 15732 KB
subtask_1_15.txt AC 88 ms 15860 KB
subtask_1_16.txt AC 69 ms 15096 KB
subtask_1_17.txt AC 244 ms 18288 KB
subtask_1_18.txt AC 55 ms 15096 KB
subtask_1_19.txt AC 145 ms 16880 KB
subtask_1_20.txt AC 234 ms 17648 KB
subtask_1_21.txt AC 252 ms 17520 KB
subtask_1_22.txt AC 304 ms 18544 KB
subtask_1_23.txt AC 252 ms 17520 KB
subtask_1_24.txt AC 301 ms 18416 KB
subtask_1_25.txt AC 261 ms 18416 KB
subtask_1_26.txt AC 261 ms 18416 KB
subtask_1_27.txt AC 210 ms 18160 KB
subtask_1_28.txt AC 305 ms 18416 KB
subtask_1_29.txt AC 260 ms 18416 KB
subtask_1_30.txt AC 258 ms 18416 KB
subtask_1_31.txt AC 204 ms 18160 KB
subtask_1_32.txt AC 305 ms 18416 KB
subtask_1_33.txt AC 261 ms 18416 KB
subtask_1_34.txt AC 245 ms 18288 KB
subtask_1_35.txt AC 214 ms 18160 KB
subtask_1_36.txt AC 307 ms 18544 KB
subtask_1_37.txt AC 260 ms 18416 KB
subtask_1_38.txt AC 245 ms 18288 KB
subtask_1_39.txt AC 238 ms 18160 KB
subtask_1_40.txt AC 308 ms 18544 KB
subtask_1_41.txt AC 139 ms 17520 KB
subtask_1_42.txt AC 128 ms 16880 KB
subtask_1_43.txt AC 143 ms 18416 KB
subtask_1_44.txt AC 128 ms 16880 KB
subtask_1_45.txt AC 118 ms 16752 KB
subtask_1_46.txt AC 115 ms 17520 KB
subtask_1_47.txt AC 105 ms 16752 KB
subtask_1_48.txt AC 122 ms 18416 KB
subtask_1_49.txt AC 110 ms 16880 KB
subtask_1_50.txt AC 98 ms 16624 KB
subtask_1_51.txt AC 5 ms 14080 KB
subtask_1_52.txt AC 5 ms 14080 KB
subtask_1_53.txt AC 5 ms 14080 KB
subtask_1_54.txt AC 5 ms 14080 KB
subtask_1_55.txt AC 5 ms 14080 KB