Submission #65507267
Source Code Expand
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const ll N = 3e6;
struct segtree {
struct node {
ll lo, hi, vl;
node *left, *right;
node(ll low, ll high) {
lo = low, hi = high;
vl = 1LL;
left = right = nullptr;
if (low < high) {
ll mid = (lo+hi)/2;
left = new node(lo, mid);
right = new node(mid+1, hi);
update();
}
}
node (ll low, ll high, ll val, node *lt, node *rt) {
lo = low, hi = high;
vl = val;
left = lt, right = rt;
}
void update() {
vl = left->vl+right->vl;
}
};
public:
node *root;
vector<node*> v;
void set(ll i, ll vl, node *nd) {
if (nd->lo > i || nd->hi < i) return;
if (nd->lo == nd->hi) nd->vl = vl;
else {
set(i, vl, nd->left);
set(i, vl, nd->right);
nd->update();
}
}
void r_gen(ll i, ll vl, node *nd) {
if (nd->lo >= i) v.push_back(nd);
else if (nd->hi < i) return;
else {
r_gen(i, vl, nd->left);
r_gen(i, vl, nd->right);
}
}
void l_gen(ll i, ll vl, node *nd) {
if (nd->hi <= i) v.push_back(nd);
else if (nd->lo > i) return;
else {
l_gen(i, vl, nd->right);
l_gen(i, vl, nd->left);
}
}
ll upper_bound(ll val, node *nd) {
if (nd->vl <= val) {
return nd->hi+1LL;
}
else if (nd->lo == nd->hi) return nd->lo;
else if (nd->left->vl <= val) return upper_bound(val-nd->left->vl, nd->right);
else return upper_bound(val, nd->left);
}
// Returns location-1 than the usual definition
ll lower_bound(ll val, node *nd) {
if (nd->vl <= val) return nd->lo-1LL;
else if (nd->lo == nd->hi) return nd->lo;
else if (nd->right->vl <= val) return lower_bound(val, nd->left);
else return lower_bound(val, nd->right);
}
public:
segtree (ll n) {
root = new node(0, n-1);
}
void set(ll i, ll vl) {
set(i, vl, root);
}
ll r_srch(ll i, ll vl) {
v.clear();
r_gen(i, vl, root);
ll ret;
for (auto nd: v) {
ret = upper_bound(vl, nd)-1LL;
if (ret < nd->hi) break;
}
return ret;
}
ll l_srch(ll i, ll vl) {
v.clear();
l_gen(i, vl, root);
ll ret;
for (auto nd: v) {
ret = lower_bound(vl, nd)+1LL;
if (ret > nd->lo) break;
}
return ret;
}
};
int main() {
ios::sync_with_stdio(false), cin.tie(nullptr);
ll q;
cin >> q;
set<ll> st;
vector<bool> v(N+1, true);
segtree tree(N+1);
tree.set(0LL, 0LL);
while (q--) {
ll a, b;
cin >> a >> b;
if (a <= N && v[a]) {
for (ll x = a; x <= N; x += a) if (v[x]) {
tree.set(x, 0LL);
v[x] = false;
}
}
ll ans = tree.upper_bound(b-1, tree.root);
cout << ans << '\n';
}
return 0;
};
Submission Info
Judge Result
| Set Name |
Sample |
All |
| Score / Max Score |
0 / 0 |
600 / 600 |
| Status |
|
|
| Set Name |
Test Cases |
| Sample |
01_sample_01.txt |
| All |
01_sample_01.txt, 02_small_AB_01.txt, 02_small_AB_02.txt, 02_small_AB_03.txt, 02_small_AB_04.txt, 02_small_AB_05.txt, 03_rand_1_01.txt, 03_rand_1_02.txt, 03_rand_1_03.txt, 03_rand_1_04.txt, 03_rand_1_05.txt, 04_rand_2_01.txt, 04_rand_2_02.txt, 04_rand_2_03.txt, 04_rand_2_04.txt, 04_rand_2_05.txt, 05_rand_3_01.txt, 05_rand_3_02.txt, 05_rand_3_03.txt, 05_rand_3_04.txt, 05_rand_3_05.txt, 06_rand_4_01.txt, 06_rand_4_02.txt, 06_rand_4_03.txt, 06_rand_4_04.txt, 06_rand_4_05.txt, 06_rand_4_06.txt, 06_rand_4_07.txt, 06_rand_4_08.txt, 06_rand_4_09.txt, 06_rand_4_10.txt, 06_rand_4_11.txt, 06_rand_4_12.txt, 06_rand_4_13.txt, 06_rand_4_14.txt, 06_rand_4_15.txt, 06_rand_4_16.txt, 07_max_ans_01.txt, 07_max_ans_02.txt, 07_max_ans_03.txt |
| Case Name |
Status |
Exec Time |
Memory |
| 01_sample_01.txt |
AC |
365 ms |
284656 KiB |
| 02_small_AB_01.txt |
AC |
1189 ms |
284788 KiB |
| 02_small_AB_02.txt |
AC |
1179 ms |
284736 KiB |
| 02_small_AB_03.txt |
AC |
945 ms |
284732 KiB |
| 02_small_AB_04.txt |
AC |
1039 ms |
284736 KiB |
| 02_small_AB_05.txt |
AC |
1052 ms |
284748 KiB |
| 03_rand_1_01.txt |
AC |
209 ms |
284756 KiB |
| 03_rand_1_02.txt |
AC |
213 ms |
284660 KiB |
| 03_rand_1_03.txt |
AC |
209 ms |
284888 KiB |
| 03_rand_1_04.txt |
AC |
209 ms |
284692 KiB |
| 03_rand_1_05.txt |
AC |
210 ms |
284788 KiB |
| 04_rand_2_01.txt |
AC |
869 ms |
284792 KiB |
| 04_rand_2_02.txt |
AC |
884 ms |
284696 KiB |
| 04_rand_2_03.txt |
AC |
863 ms |
284788 KiB |
| 04_rand_2_04.txt |
AC |
845 ms |
284880 KiB |
| 04_rand_2_05.txt |
AC |
806 ms |
284792 KiB |
| 05_rand_3_01.txt |
AC |
530 ms |
284760 KiB |
| 05_rand_3_02.txt |
AC |
560 ms |
284808 KiB |
| 05_rand_3_03.txt |
AC |
538 ms |
284792 KiB |
| 05_rand_3_04.txt |
AC |
564 ms |
284804 KiB |
| 05_rand_3_05.txt |
AC |
524 ms |
284748 KiB |
| 06_rand_4_01.txt |
AC |
845 ms |
284804 KiB |
| 06_rand_4_02.txt |
AC |
881 ms |
284684 KiB |
| 06_rand_4_03.txt |
AC |
1909 ms |
284792 KiB |
| 06_rand_4_04.txt |
AC |
1930 ms |
284652 KiB |
| 06_rand_4_05.txt |
AC |
1251 ms |
284884 KiB |
| 06_rand_4_06.txt |
AC |
1280 ms |
284748 KiB |
| 06_rand_4_07.txt |
AC |
1237 ms |
284764 KiB |
| 06_rand_4_08.txt |
AC |
1261 ms |
284696 KiB |
| 06_rand_4_09.txt |
AC |
811 ms |
284708 KiB |
| 06_rand_4_10.txt |
AC |
851 ms |
284708 KiB |
| 06_rand_4_11.txt |
AC |
1650 ms |
284884 KiB |
| 06_rand_4_12.txt |
AC |
1699 ms |
284760 KiB |
| 06_rand_4_13.txt |
AC |
1454 ms |
284692 KiB |
| 06_rand_4_14.txt |
AC |
1488 ms |
284788 KiB |
| 06_rand_4_15.txt |
AC |
1662 ms |
284804 KiB |
| 06_rand_4_16.txt |
AC |
1684 ms |
284804 KiB |
| 07_max_ans_01.txt |
AC |
835 ms |
284664 KiB |
| 07_max_ans_02.txt |
AC |
1898 ms |
284692 KiB |
| 07_max_ans_03.txt |
AC |
1400 ms |
284736 KiB |