結果
| 問題 |
No.833 かっこいい電車
|
| コンテスト | |
| ユーザー |
bal4u
|
| 提出日時 | 2019-07-30 07:17:22 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,903 bytes |
| コンパイル時間 | 138 ms |
| コンパイル使用メモリ | 31,616 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-07-02 15:36:18 |
| 合計ジャッジ時間 | 1,426 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 23 WA * 7 |
コンパイルメッセージ
main.c: In function 'in':
main.c:10:14: warning: implicit declaration of function 'getchar_unlocked' [-Wimplicit-function-declaration]
10 | #define gc() getchar_unlocked()
| ^~~~~~~~~~~~~~~~
main.c:17:24: note: in expansion of macro 'gc'
17 | int n = 0, c = gc();
| ^~
main.c: In function 'out':
main.c:11:15: warning: implicit declaration of function 'putchar_unlocked' [-Wimplicit-function-declaration]
11 | #define pc(c) putchar_unlocked(c)
| ^~~~~~~~~~~~~~~~
main.c:27:21: note: in expansion of macro 'pc'
27 | while (i--) pc(b[i]);
| ^~
ソースコード
// yukicoder: No.833 かっこいい電車
// 2019.7.30 bal4u
#include <stdio.h>
//typedef unsigned ll;
typedef unsigned ll;
#if 1
#define gc() getchar_unlocked()
#define pc(c) putchar_unlocked(c)
#else
#define gc() getchar()
#define pc(c) putchar(c)
#endif
int in() { // 非負整数の入力
int n = 0, c = gc();
do n = 10 * n + (c & 0xf); while ((c = gc()) >= '0');
return n;
}
void out(ll n) { // 正整数の表示(出力)
int i;
char b[50];
i = 0; while (n) b[i++] = n % 10 + '0', n /= 10;
while (i--) pc(b[i]);
pc('\n');
}
// bit木
ll bit[100005], bitn;
void add(int i, int v) {
while (i <= bitn) bit[i] += v, i += i & -i;
}
ll sum(int i) {
ll s = 0;
while (i > 0) s += bit[i], i -= i & -i;
return s;
}
// 単体車両のカッコよさ、グループの先頭、グループの末尾位置、グループのカッコよさ
typedef struct { int a, top, r; ll total; } T;
T tbl[100005]; int N;
int top(int x) { // 単体x のグループ先頭位置
int t;
do t = x, x = tbl[x].top;
while (t != x);
return x;
}
int main()
{
int i, id, Q, x, t; ll s;
bitn = N = in(), Q = in();
for (i = 1; i <= N; i++) {
tbl[i].a = t = in(), tbl[i].top = i, tbl[i].r = i;
tbl[i].total = t, add(i, t);
}
while (Q--) {
id = gc() & 0xf, gc(), x = in();
if (id == 1) { // connecct
if ((t = top(x)) != top(x+1)) {
tbl[x+1].top = t,
tbl[t].r = tbl[x+1].r;
tbl[t].total += tbl[x+1].total;
}
} else if (id == 2) { // separate
if ((t = top(x)) == top(x+1)) {
tbl[x+1].r = tbl[t].r;
tbl[t].r = x;
tbl[x+1].total = sum(tbl[x+1].r) - sum(x);
tbl[t].total -= tbl[x+1].total;
for (i = tbl[++x].r; i >= x; i--) tbl[i].top = x; // topは全部書き換える
}
} else if (id == 3) { // remodel
tbl[x].a++, add(x, 1), tbl[top(x)].total++;
} else { // attractiveness
out(tbl[top(x)].total);
}
}
return 0;
}
bal4u