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 |
|
|
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 |