Submission #1224010
Source Code Expand
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <cassert>
using namespace std;
#define rep(i,a,n) for (int i=a;i<n;i++)
#define per(i,a,n) for (int i=n-1;i>=a;i--)
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define SZ(x) ((int)(x).size())
typedef vector<int> VI;
typedef long long ll;
typedef pair<int,int> PII;
const ll mod=1000000007;
ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
// head
const int N=101000;
struct node {
int fg,mv;
}nd[4*N];
multiset<PII> ff[4*N];
int n,a[N],b[N],c[N],Q,p,q,f[N],pre[N];
VI pos[N];
void upd(int p) { nd[p].mv=max(nd[p+p].mv,nd[p+p+1].mv);}
void setf(int p,int v) {
nd[p].fg+=v;
nd[p].mv+=v;
}
void build(int p,int l,int r) {
nd[p].fg=0;
if (l==r) {
nd[p].mv=pre[l];
} else {
int md=(l+r)>>1;
build(p+p,l,md);
build(p+p+1,md+1,r);
upd(p);
}
}
void push(int p) {
if (nd[p].fg) {
setf(p+p,nd[p].fg);
setf(p+p+1,nd[p].fg);
nd[p].fg=0;
}
}
int query(int p,int l,int r,int tl,int tr) {
if (tl==l&&tr==r) return nd[p].mv;
else {
push(p);
int md=(l+r)>>1;
if (tr<=md) return query(p+p,l,md,tl,tr);
else if (tl>md) return query(p+p+1,md+1,r,tl,tr);
else return max(query(p+p,l,md,tl,md),query(p+p+1,md+1,r,md+1,tr));
}
}
void modify(int p,int l,int r,int tl,int tr,int v) {
if (tl>tr) return;
if (tl==l&&tr==r) return setf(p,v);
else {
push(p);
int md=(l+r)>>1;
if (tr<=md) modify(p+p,l,md,tl,tr,v);
else if (tl>md) modify(p+p+1,md+1,r,tl,tr,v);
else modify(p+p,l,md,tl,md,v),modify(p+p+1,md+1,r,md+1,tr,v);
upd(p);
}
}
void add(int p,int l,int r,int tl,int tr,PII v) {
if (tl>tr) return;
if (tl==l&&tr==r) ff[p].insert(v);
else {
int md=(l+r)>>1;
if (tr<=md) add(p+p,l,md,tl,tr,v);
else if (tl>md) add(p+p+1,md+1,r,tl,tr,v);
else add(p+p,l,md,tl,md,v),add(p+p+1,md+1,r,md+1,tr,v);
}
}
void del(int p,int l,int r,int tl,int tr,PII v) {
if (tl>tr) return;
if (tl==l&&tr==r) ff[p].erase(ff[p].find(v));
else {
int md=(l+r)>>1;
if (tr<=md) del(p+p,l,md,tl,tr,v);
else if (tl>md) del(p+p+1,md+1,r,tl,tr,v);
else del(p+p,l,md,tl,md,v),del(p+p+1,md+1,r,md+1,tr,v);
}
}
PII find(int p,int l,int r,int x) {
PII c=mp(-1,-1);
if (!ff[p].empty()) c=max(c,*ff[p].rbegin());
if (l!=r) {
int md=(l+r)>>1;
if (x<=md) c=max(c,find(p+p,l,md,x));
else c=max(c,find(p+p+1,md+1,r,x));
}
return c;
}
multiset<PII> Bl;
vector<PII> blk[N];
int main() {
scanf("%d",&n);
rep(i,0,n) scanf("%d%d",a+i,b+i);
rep(i,0,n+1) scanf("%d",c+i);
sort(c,c+n+1);
pre[0]-=1;
f[0]=0;
rep(i,0,n) {
a[i]=lower_bound(c,c+n+1,a[i])-c;
b[i]=lower_bound(c,c+n+1,b[i])-c;
// printf("pp %d %d\n",a[i],b[i]);
if (a[i]<=b[i]) f[0]++,pre[a[i]]-=1;
else {
// a[i]>b[i]
pos[a[i]].pb(b[i]);
pre[b[i]]-=1;
}
}
rep(i,0,n+1) pre[i]++;
rep(i,1,n+1) pre[i]+=pre[i-1];
build(1,0,n);
rep(i,1,n+2) f[i]=-(1<<30);
if (nd[1].mv<=0) {
rep(r,0,n+1) {
sort(all(pos[r]));
for (auto l:pos[r]) {
if (l<r&&query(1,0,n,l,r-1)<0) {
modify(1,0,n,l,r-1,1),add(1,0,n,l,r-1,mp(r-1,l)),f[0]++;
// printf("set %d %d\n",l,r-1);
} else if (l<r) {
blk[l].pb(mp(r-1,l));
}
}
}
Bl.clear();
rep(i,1,n+1) for (auto p:blk[i]) Bl.insert(p);
// printf("ff %d %d\n",0,f[0]);
rep(i,1,n+1) {
if (query(1,0,n,i-1,i-1)<0) {
f[i]=f[i-1];
modify(1,0,n,i-1,i-1,1);
} else {
PII c=find(1,0,n,i-1);
if (c==mp(-1,-1)) break;
// printf("cancel %d %d\n",c.fi,c.se);
f[i]=f[i-1]-1;
modify(1,0,n,c.se,c.fi,-1);
modify(1,0,n,i-1,i-1,1);
del(1,0,n,c.se,c.fi,c);
if (!Bl.empty()) {
PII d=*Bl.begin();
// printf("rr %d %d\n",d.fi,d.se);
if (query(1,0,n,d.se,d.fi)<0) {
modify(1,0,n,d.se,d.fi,1);
add(1,0,n,d.se,d.fi,d);
// printf("replace %d %d\n",d.fi,d.se);
f[i]++;
Bl.erase(Bl.begin());
}
}
}
// printf("ff %d %d\n",i,f[i]);
for (auto p:blk[i]) if (Bl.find(p)!=Bl.end()) Bl.erase(Bl.find(p));
}
} else f[0]=-(1<<30);
scanf("%d",&Q);
rep(i,0,Q) {
scanf("%d%d",&p,&q);
p=lower_bound(c,c+n+1,p)-c,q=lower_bound(c,c+n+1,q)-c;
// printf("q %d %d\n",p,q);
int r=max(max(f[p]+1,f[q]),-1);
printf("%d\n",r);
}
}
Submission Info
Submission Time |
|
Task |
F - Two Faced Cards |
User |
apiad |
Language |
C++14 (GCC 5.4.1) |
Score |
2000 |
Code Size |
4549 Byte |
Status |
AC |
Exec Time |
357 ms |
Memory |
72832 KB |
Compile Error
./Main.cpp: In function ‘int main()’:
./Main.cpp:114:16: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d",&n);
^
./Main.cpp:115:34: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
rep(i,0,n) scanf("%d%d",a+i,b+i);
^
./Main.cpp:116:30: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
rep(i,0,n+1) scanf("%d",c+i);
^
./Main.cpp:180:16: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d",&Q);
^
./Main.cpp:182:22: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d",&p,&q);
^
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 |
10 ms |
26880 KB |
sample_02.txt |
AC |
10 ms |
26880 KB |
sample_03.txt |
AC |
10 ms |
26880 KB |
subtask_1_01.txt |
AC |
177 ms |
49280 KB |
subtask_1_02.txt |
AC |
123 ms |
33280 KB |
subtask_1_03.txt |
AC |
86 ms |
36352 KB |
subtask_1_04.txt |
AC |
126 ms |
34176 KB |
subtask_1_05.txt |
AC |
79 ms |
34176 KB |
subtask_1_06.txt |
AC |
136 ms |
34688 KB |
subtask_1_07.txt |
AC |
91 ms |
31488 KB |
subtask_1_08.txt |
AC |
203 ms |
37376 KB |
subtask_1_09.txt |
AC |
235 ms |
60544 KB |
subtask_1_10.txt |
AC |
77 ms |
33408 KB |
subtask_1_11.txt |
AC |
51 ms |
30336 KB |
subtask_1_12.txt |
AC |
102 ms |
33024 KB |
subtask_1_13.txt |
AC |
151 ms |
47104 KB |
subtask_1_14.txt |
AC |
61 ms |
32256 KB |
subtask_1_15.txt |
AC |
62 ms |
30976 KB |
subtask_1_16.txt |
AC |
54 ms |
28544 KB |
subtask_1_17.txt |
AC |
343 ms |
72832 KB |
subtask_1_18.txt |
AC |
54 ms |
32000 KB |
subtask_1_19.txt |
AC |
96 ms |
30720 KB |
subtask_1_20.txt |
AC |
214 ms |
37120 KB |
subtask_1_21.txt |
AC |
357 ms |
64768 KB |
subtask_1_22.txt |
AC |
231 ms |
37248 KB |
subtask_1_23.txt |
AC |
355 ms |
64896 KB |
subtask_1_24.txt |
AC |
231 ms |
37248 KB |
subtask_1_25.txt |
AC |
324 ms |
68992 KB |
subtask_1_26.txt |
AC |
207 ms |
37248 KB |
subtask_1_27.txt |
AC |
126 ms |
32000 KB |
subtask_1_28.txt |
AC |
257 ms |
38144 KB |
subtask_1_29.txt |
AC |
330 ms |
68864 KB |
subtask_1_30.txt |
AC |
207 ms |
37248 KB |
subtask_1_31.txt |
AC |
128 ms |
32000 KB |
subtask_1_32.txt |
AC |
258 ms |
38144 KB |
subtask_1_33.txt |
AC |
331 ms |
68864 KB |
subtask_1_34.txt |
AC |
194 ms |
37248 KB |
subtask_1_35.txt |
AC |
126 ms |
32000 KB |
subtask_1_36.txt |
AC |
262 ms |
38144 KB |
subtask_1_37.txt |
AC |
333 ms |
68864 KB |
subtask_1_38.txt |
AC |
198 ms |
37248 KB |
subtask_1_39.txt |
AC |
128 ms |
32000 KB |
subtask_1_40.txt |
AC |
257 ms |
38272 KB |
subtask_1_41.txt |
AC |
339 ms |
64000 KB |
subtask_1_42.txt |
AC |
145 ms |
31360 KB |
subtask_1_43.txt |
AC |
332 ms |
70784 KB |
subtask_1_44.txt |
AC |
132 ms |
32000 KB |
subtask_1_45.txt |
AC |
109 ms |
29440 KB |
subtask_1_46.txt |
AC |
319 ms |
63872 KB |
subtask_1_47.txt |
AC |
128 ms |
29824 KB |
subtask_1_48.txt |
AC |
307 ms |
69120 KB |
subtask_1_49.txt |
AC |
137 ms |
30592 KB |
subtask_1_50.txt |
AC |
101 ms |
29312 KB |
subtask_1_51.txt |
AC |
10 ms |
26880 KB |
subtask_1_52.txt |
AC |
10 ms |
26880 KB |
subtask_1_53.txt |
AC |
10 ms |
26880 KB |
subtask_1_54.txt |
AC |
10 ms |
26880 KB |
subtask_1_55.txt |
AC |
10 ms |
26880 KB |