Submission #2138279
Source Code Expand
#include <bits/stdc++.h>
using namespace std;
template< typename Monoid >
struct SegmentTree
{
using F = function< Monoid(Monoid, Monoid) >;
int sz;
vector< Monoid > seg;
const F f;
const Monoid M1;
SegmentTree(int n, const F f, const Monoid &M1) : f(f), M1(M1)
{
sz = 1;
while(sz < n) sz <<= 1;
seg.assign(2 * sz, M1);
}
void set(int k, const Monoid &x)
{
seg[k + sz] = x;
}
void build()
{
for(int k = sz - 1; k > 0; k--) {
seg[k] = f(seg[2 * k + 0], seg[2 * k + 1]);
}
}
void update(int k, const Monoid &x)
{
k += sz;
seg[k] = x;
while(k >>= 1) {
seg[k] = f(seg[2 * k + 0], seg[2 * k + 1]);
}
}
Monoid query(int a, int b)
{
Monoid L = M1, R = M1;
for(a += sz, b += sz; a < b; a >>= 1, b >>= 1) {
if(a & 1) L = f(L, seg[a++]);
if(b & 1) R = f(seg[--b], R);
}
return f(L, R);
}
Monoid operator[](const int &k) const
{
return seg[k + sz];
}
int binary_search(int &x, int k)
{
if(seg[k] < x) {
x -= seg[k];
return (-1);
} else if(k >= sz) {
return k - sz;
} else {
int left = binary_search(x, 2 * k);
if(~left) return left;
return binary_search(x, 2 * k + 1);
}
}
};
using int64 = long long;
int main()
{
int Q;
scanf("%d", &Q);
SegmentTree< int > seg(200001, [](int a, int b) { return a + b; }, 0);
while(Q--) {
int T, X;
scanf("%d %d", &T, &X);
if(T == 1) {
seg.update(X, seg[X] + 1);
} else {
int pos = seg.binary_search(X, 1);
printf("%d\n", pos);
seg.update(pos, seg[pos] - 1);
}
}
}
Submission Info
Submission Time |
|
Task |
C - データ構造 |
User |
ei13333 |
Language |
C++14 (GCC 5.4.1) |
Score |
100 |
Code Size |
1734 Byte |
Status |
AC |
Exec Time |
73 ms |
Memory |
2944 KB |
Compile Error
./Main.cpp: In function ‘int main()’:
./Main.cpp:79:18: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d", &Q);
^
./Main.cpp:83:27: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d %d", &T, &X);
^
Judge Result
Set Name |
Sample |
All |
Score / Max Score |
0 / 0 |
100 / 100 |
Status |
|
|
Set Name |
Test Cases |
Sample |
sample_01.txt, sample_02.txt |
All |
sample_01.txt, sample_02.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt, subtask1_16.txt |
Case Name |
Status |
Exec Time |
Memory |
sample_01.txt |
AC |
2 ms |
2304 KB |
sample_02.txt |
AC |
2 ms |
2304 KB |
subtask1_01.txt |
AC |
2 ms |
2304 KB |
subtask1_02.txt |
AC |
2 ms |
2304 KB |
subtask1_03.txt |
AC |
2 ms |
2304 KB |
subtask1_04.txt |
AC |
7 ms |
2304 KB |
subtask1_05.txt |
AC |
13 ms |
2432 KB |
subtask1_06.txt |
AC |
2 ms |
2304 KB |
subtask1_07.txt |
AC |
38 ms |
2432 KB |
subtask1_08.txt |
AC |
71 ms |
2944 KB |
subtask1_09.txt |
AC |
73 ms |
2944 KB |
subtask1_10.txt |
AC |
61 ms |
2560 KB |
subtask1_11.txt |
AC |
61 ms |
2560 KB |
subtask1_12.txt |
AC |
49 ms |
2304 KB |
subtask1_13.txt |
AC |
73 ms |
2944 KB |
subtask1_14.txt |
AC |
73 ms |
2944 KB |
subtask1_15.txt |
AC |
59 ms |
2944 KB |
subtask1_16.txt |
AC |
57 ms |
2560 KB |