Submission #55043631
Source Code Expand
#include <bits/stdc++.h>
#include <atcoder/modint>
#include <atcoder/lazysegtree>
namespace {
using ModInt [[maybe_unused]] = atcoder::modint998244353;
using Num [[maybe_unused]] = long long int;
using Vec [[maybe_unused]] = std::vector<Num>;
using Set [[maybe_unused]] = std::set<Num>;
using Mset [[maybe_unused]] = std::multiset<Num>;
using Edges [[maybe_unused]] = std::vector<std::vector<Num>>;
template<typename T>
using Q [[maybe_unused]] = std::queue<T>;
template<typename T>
using PQ [[maybe_unused]] = std::priority_queue<T, std::vector<T>, std::greater<T>>;
const std::vector<std::pair<Num, Num>> dyxs {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
template<typename T>
void print_oneline(const std::vector<T>& vec, std::ostream& os) {
const auto size = vec.size();
for(size_t i{0}; i<size; ++i) {
os << vec.at(i) << (((i+1) == size) ? '\n' : ' ');
}
}
template<typename T>
void print_each(const std::vector<T>& vec, std::ostream& os) {
const auto size = vec.size();
for(size_t i{0}; i<size; ++i) {
os << vec.at(i) << '\n';
}
}
}
Num func_operate(Num a, Num b) {
return a+b;
}
Num func_unit() {
return 0;
}
Num func_map(Num a, Num b) {
return a + b;
}
Num func_compose(Num a, Num b) {
return a + b;
}
Num func_id() {
return 0;
}
void solve(std::istream& is, std::ostream& os) {
Num n,m;
is >> n >> m;
std::vector<Vec> colors(m);
for(Num i{0}; i<n; ++i) {
Num a,b;
is >> a >> b;
--a;
--b;
colors.at(a).push_back(i);
colors.at(b).push_back(i);
}
Vec ans(m+1);
std::map<Num,Num> tbl;
Num right {-1};
atcoder::lazy_segtree<Num, func_operate, func_unit, Num, func_map, func_compose, func_id> tree(m+1);
for(Num left {0}; left < m; ++left) {
if (left > 0) {
for(const auto& v : colors.at(left-1)) {
tbl[v] -= 1;
if (tbl[v] == 0) {
tbl.erase(v);
}
}
}
while(right < m) {
if (tbl.size() == n) {
Num min_w = right - left + 1;
Num max_w = m - left;
tree.apply(min_w, max_w + 1, 1);
break;
} else {
++right;
if (right < m) {
for(const auto& v : colors.at(right)) {
tbl[v] += 1;
}
}
}
}
}
for(Num i{1}; i<=m; ++i) {
os << tree.prod(i,i+1) << ((i==m) ? '\n' : ' ');
}
}
int main(void) {
solve(std::cin, std::cout);
return 0;
}
Submission Info
Submission Time
2024-06-30 20:24:50+0900
Task
E - At Least One
User
zettsut
Language
C++ 20 (gcc 12.2)
Score
500
Code Size
2855 Byte
Status
AC
Exec Time
679 ms
Memory
35176 KiB
Compile Error
Main.cpp: In function ‘void solve(std::istream&, std::ostream&)’:
Main.cpp:88:28: warning: comparison of integer expressions of different signedness: ‘std::map<long long int, long long int>::size_type’ {aka ‘long unsigned int’} and ‘{anonymous}::Num’ {aka ‘long long int’} [-Wsign-compare]
88 | if (tbl.size() == n) {
| ~~~~~~~~~~~^~~~
Judge Result
Set Name
Sample
All
Score / Max Score
0 / 0
500 / 500
Status
Set Name
Test Cases
Sample
00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All
00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 02_max_00.txt, 03_min_00.txt, 04_corner_00.txt, 04_corner_01.txt, 04_corner_02.txt
Case Name
Status
Exec Time
Memory
00_sample_00.txt
AC
1 ms
3588 KiB
00_sample_01.txt
AC
1 ms
3488 KiB
00_sample_02.txt
AC
1 ms
3548 KiB
01_random_00.txt
AC
648 ms
35176 KiB
01_random_01.txt
AC
651 ms
35116 KiB
01_random_02.txt
AC
674 ms
34840 KiB
01_random_03.txt
AC
679 ms
34824 KiB
02_max_00.txt
AC
230 ms
31036 KiB
03_min_00.txt
AC
197 ms
34444 KiB
04_corner_00.txt
AC
64 ms
17176 KiB
04_corner_01.txt
AC
245 ms
31288 KiB
04_corner_02.txt
AC
261 ms
31660 KiB