Submission #2116844
Source Code Expand
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
#define SIZE 262144
typedef pair<int, int>pii;
class segtree
{
public:
int seg[SIZE * 2];
int flag[SIZE * 2];
int idx[SIZE * 2];
void init()
{
for (int i = 0; i < SIZE; i++)idx[SIZE + i] = i;
for (int i = SIZE - 1; i >= 1; i--)idx[i] = idx[i * 2];
}
void update(int beg, int end, int node, int lb, int ub, int num)
{
if (ub<beg || end<lb)return;
if (beg <= lb&&ub <= end)
{
seg[node] += num;
flag[node] += num;
return;
}
if (flag[node])
{
seg[node * 2] += flag[node];
seg[node * 2 + 1] += flag[node];
flag[node * 2] += flag[node];
flag[node * 2 + 1] += flag[node];
flag[node] = 0;
}
update(beg, end, node * 2, lb, (lb + ub) / 2, num);
update(beg, end, node * 2 + 1, (lb + ub) / 2 + 1, ub, num);
seg[node] = min(seg[node * 2], seg[node * 2 + 1]);
if (seg[node] == seg[node * 2])idx[node] = idx[node * 2];
else idx[node] = idx[node * 2 + 1];
}
pii get(int beg, int end, int node, int lb, int ub)
{
if (ub < beg || end < lb)return make_pair(1000000000, -1);
if (beg <= lb&&ub <= end)
{
return make_pair(seg[node], idx[node]);
}
if (flag[node])
{
seg[node * 2] += flag[node];
seg[node * 2 + 1] += flag[node];
flag[node * 2] += flag[node];
flag[node * 2 + 1] += flag[node];
flag[node] = 0;
}
pii a = get(beg, end, node * 2, lb, (lb + ub) / 2), b = get(beg, end, node * 2 + 1, (lb + ub) / 2 + 1, ub);
int d;
if (a.first <= b.first)d = a.second;
else d = b.second;
return make_pair(min(a.first, b.first), d);
}
};
segtree tree;
vector<int>pat[SIZE];
int ans[SIZE];
int main()
{
int num;
scanf("%d", &num);
vector<pii>v;
for (int i = 0; i < num; i++)
{
int za, zb;
scanf("%d%d", &za, &zb);
zb = min(za, zb);
v.push_back(make_pair(za, zb));
}
vector<int>zat;
for (int i = 0; i < num + 1; i++)
{
int z;
scanf("%d", &z);
zat.push_back(z);
}
sort(zat.begin(), zat.end());
for (int i = 0; i < num; i++)
{
v[i].first = lower_bound(zat.begin(), zat.end(), v[i].first) - zat.begin();
v[i].second = lower_bound(zat.begin(), zat.end(), v[i].second) - zat.begin();
}
sort(v.begin(), v.end());
tree.init();
for (int i = 0; i < num + 1; i++)tree.update(i, num, 1, 0, SIZE - 1, -1);
for (int i = 0; i < num; i++)tree.update(v[i].second, num, 1, 0, SIZE - 1, 1);
int pt = 0;
ans[num + 1] = -1;
int cnt = 0;
for (int i = 0; i < num; i++)
{
//printf("------%d %d\n", v[i].second, v[i].first);
//for (int j = 0; j < num + 2; j++)printf("%d ", tree.get(j, j, 1, 0, SIZE - 1).first); printf("\n");
pii r = tree.get(v[i].second, v[i].first - 1, 1, 0, SIZE - 1);
//printf(" %d %d\n", r.first, r.second);
if (r.first >= 1)
{
tree.update(v[i].second, v[i].first - 1, 1, 0, SIZE - 1, -1);
cnt++;
}
else if (r.first == 0)
{
for (int j = pt; j <= r.second; j++)pat[v[i].first].push_back(j);
pt = max(pt, r.second + 1);
}
}
for (int i = pt; i < num + 1; i++)ans[i] = cnt;
for (int i = num; i >= 0; i--)for (int j = 0; j < pat[i].size(); j++)ans[pat[i][j]] = ans[i] + 1;
for (int i = 0; i < num + 1; i++)
{
if (tree.get(0, SIZE - 1, 1, 0, SIZE - 1).first <= -2)ans[i] = -1;
if (tree.get(0, i - 1, 1, 0, SIZE - 1).first <= -1)ans[i] = -1;
}
int query;
scanf("%d", &query);
for (int i = 0; i < query; i++)
{
int za, zb;
scanf("%d%d", &za, &zb);
zb = min(za, zb);
za = lower_bound(zat.begin(), zat.end(), za) - zat.begin();
zb = lower_bound(zat.begin(), zat.end(), zb) - zat.begin();
if (ans[za] == -1)printf("%d\n", ans[zb]);
else printf("%d\n", max(ans[za] + 1, ans[zb]));
}
}
Submission Info
Submission Time |
|
Task |
F - Two Faced Cards |
User |
DEGwer |
Language |
C++14 (GCC 5.4.1) |
Score |
2000 |
Code Size |
3755 Byte |
Status |
AC |
Exec Time |
402 ms |
Memory |
17780 KB |
Compile Error
./Main.cpp: In function ‘int main()’:
./Main.cpp:69:19: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d", &num);
^
./Main.cpp:74:26: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d", &za, &zb);
^
./Main.cpp:82:18: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d", &z);
^
./Main.cpp:123:21: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d", &query);
^
./Main.cpp:127:26: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d", &za, &zb);
^
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 |
12544 KB |
sample_02.txt |
AC |
5 ms |
12544 KB |
sample_03.txt |
AC |
5 ms |
12544 KB |
subtask_1_01.txt |
AC |
148 ms |
13944 KB |
subtask_1_02.txt |
AC |
121 ms |
15352 KB |
subtask_1_03.txt |
AC |
79 ms |
13436 KB |
subtask_1_04.txt |
AC |
129 ms |
15732 KB |
subtask_1_05.txt |
AC |
74 ms |
13308 KB |
subtask_1_06.txt |
AC |
172 ms |
15732 KB |
subtask_1_07.txt |
AC |
195 ms |
14836 KB |
subtask_1_08.txt |
AC |
205 ms |
15732 KB |
subtask_1_09.txt |
AC |
191 ms |
14452 KB |
subtask_1_10.txt |
AC |
113 ms |
14968 KB |
subtask_1_11.txt |
AC |
102 ms |
13688 KB |
subtask_1_12.txt |
AC |
97 ms |
14072 KB |
subtask_1_13.txt |
AC |
136 ms |
13816 KB |
subtask_1_14.txt |
AC |
86 ms |
14328 KB |
subtask_1_15.txt |
AC |
141 ms |
14196 KB |
subtask_1_16.txt |
AC |
50 ms |
13180 KB |
subtask_1_17.txt |
AC |
275 ms |
15220 KB |
subtask_1_18.txt |
AC |
75 ms |
14200 KB |
subtask_1_19.txt |
AC |
157 ms |
13944 KB |
subtask_1_20.txt |
AC |
208 ms |
15732 KB |
subtask_1_21.txt |
AC |
284 ms |
15476 KB |
subtask_1_22.txt |
AC |
232 ms |
17780 KB |
subtask_1_23.txt |
AC |
285 ms |
15732 KB |
subtask_1_24.txt |
AC |
232 ms |
17780 KB |
subtask_1_25.txt |
AC |
283 ms |
15220 KB |
subtask_1_26.txt |
AC |
238 ms |
17396 KB |
subtask_1_27.txt |
AC |
231 ms |
15092 KB |
subtask_1_28.txt |
AC |
253 ms |
16244 KB |
subtask_1_29.txt |
AC |
284 ms |
15220 KB |
subtask_1_30.txt |
AC |
238 ms |
17396 KB |
subtask_1_31.txt |
AC |
231 ms |
15092 KB |
subtask_1_32.txt |
AC |
253 ms |
16244 KB |
subtask_1_33.txt |
AC |
284 ms |
15220 KB |
subtask_1_34.txt |
AC |
237 ms |
17396 KB |
subtask_1_35.txt |
AC |
240 ms |
14836 KB |
subtask_1_36.txt |
AC |
255 ms |
16244 KB |
subtask_1_37.txt |
AC |
402 ms |
15220 KB |
subtask_1_38.txt |
AC |
238 ms |
17396 KB |
subtask_1_39.txt |
AC |
233 ms |
15732 KB |
subtask_1_40.txt |
AC |
253 ms |
16244 KB |
subtask_1_41.txt |
AC |
267 ms |
15476 KB |
subtask_1_42.txt |
AC |
232 ms |
15476 KB |
subtask_1_43.txt |
AC |
273 ms |
15348 KB |
subtask_1_44.txt |
AC |
233 ms |
15220 KB |
subtask_1_45.txt |
AC |
229 ms |
14836 KB |
subtask_1_46.txt |
AC |
254 ms |
15348 KB |
subtask_1_47.txt |
AC |
219 ms |
15220 KB |
subtask_1_48.txt |
AC |
250 ms |
15348 KB |
subtask_1_49.txt |
AC |
224 ms |
15220 KB |
subtask_1_50.txt |
AC |
219 ms |
14836 KB |
subtask_1_51.txt |
AC |
5 ms |
12544 KB |
subtask_1_52.txt |
AC |
5 ms |
12544 KB |
subtask_1_53.txt |
AC |
5 ms |
12544 KB |
subtask_1_54.txt |
AC |
5 ms |
12544 KB |
subtask_1_55.txt |
AC |
5 ms |
12544 KB |