結果
問題 | No.255 Splarrraaay スプラーレェーーイ |
ユーザー | Kmcode1 |
提出日時 | 2015-07-24 23:00:20 |
言語 | C++11 (gcc 11.4.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 3,323 bytes |
コンパイル時間 | 1,211 ms |
コンパイル使用メモリ | 110,672 KB |
実行使用メモリ | 86,804 KB |
最終ジャッジ日時 | 2024-07-08 13:29:46 |
合計ジャッジ時間 | 6,385 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | WA | - |
testcase_01 | WA | - |
testcase_02 | WA | - |
testcase_03 | WA | - |
testcase_04 | AC | 24 ms
78,644 KB |
testcase_05 | WA | - |
testcase_06 | WA | - |
testcase_07 | WA | - |
testcase_08 | WA | - |
testcase_09 | WA | - |
コンパイルメッセージ
main.cpp: In function ‘int main()’: main.cpp:135:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 135 | scanf("%lld", &n); | ~~~~~^~~~~~~~~~~~ main.cpp:137:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 137 | scanf("%d", &qq); | ~~~~~^~~~~~~~~~~ main.cpp: In constructor ‘st::st()’: main.cpp:38:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 38 | scanf("%d%lld%lld", &ty, &l, &r); | ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
ソースコード
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cctype> #include<cstdlib> #include<algorithm> #include<bitset> #include<vector> #include<list> #include<deque> #include<queue> #include<map> #include<set> #include<stack> #include<cmath> #include<sstream> #include<fstream> #include<iomanip> #include<ctime> #include<complex> #include<functional> #include<climits> #include<cassert> #include<iterator> #include<unordered_map> using namespace std; #define MAX 200002 long long int n; vector<long long int> v; struct st{ int ty; long long int l; long long int r; st(){ scanf("%d%lld%lld", &ty, &l, &r); } }; vector<st> vv; struct s{ long long int area = 0; int col = -1; int l=-1; int r=-1; long long int ar[5]; s(){ for (int i = 0; i < 5; i++){ ar[i] = 0; } } }; #define MAXX 300012 s seg[MAXX * 4]; void init(int b, int l, int r){ seg[b].l = l; seg[b].r = r; seg[b].area = v[r] - v[l]; if (l + 1 == r){ return; } init(b * 2 + 1, l, (l + r) >> 1); init(b * 2 + 2, (l + r) >> 1, r); } void chang(int b, int x){ for (int i = 0; i < 5; i++){ if (i == x){ seg[b].ar[i] += seg[b].area; } else{ seg[b].ar[i] = 0; } } if (seg[b].l + 1 != seg[b].r){ seg[b * 2 + 1].col = x; seg[b * 2 + 2].col = x; } seg[b].col = -1; } void update(int b){ if (seg[b].col== -1){ return; } chang(b, seg[b].col); seg[b].col = -1; return; } inline void add(int b, int l, int r, int ll, int rr, int x){ update(b); if (rr <= l || r <= ll){ return; } if (ll <= l&&r <= rr){ chang(b, x); return; } add(b * 2 + 1, l, (l + r) >> 1, ll, rr, x); add(b * 2 + 2, (l + r) >> 1, r, ll, rr, x); for (int i = 0; i < 5; i++){ seg[b].ar[i] = seg[b * 2 + 1].ar[i] + seg[b * 2 + 2].ar[i]; } } long long int sum[5]; inline void q(int b, int l, int r, int ll, int rr){ update(b); if (rr <= l || r <= ll){ return; } if (ll <= l&&r <= rr){ for (int i = 0; i < 5; i++){ sum[i] += seg[b].ar[i]; } return; } q(b * 2 + 1, l, (l + r) >> 1, ll, rr); q(b * 2 + 2, (l + r) >> 1, r, ll, rr); } long long int b[5]; void output(){ for (int i = 0; i < 5; i++){ sum[i] = 0; } q(0, 0, v.size() - 1, 0, v.size() - 1); for (int i = 0; i < 5; i++){ if (i){ printf(" "); } printf("%lld", sum[i] + b[i]); } puts(""); } int main(){ scanf("%lld", &n); int qq; scanf("%d", &qq); for (int i = 0; i < qq; i++){ vv.push_back(st()); v.push_back(vv.back().l); v.push_back(vv.back().r+1LL); } v.push_back(n); v.push_back(0); sort(v.begin(), v.end()); v.erase(unique(v.begin(), v.end()), v.end()); init(0, 0, v.size()-1); for (int i = 0; i < qq; i++){ int ind = lower_bound(v.begin(), v.end(), vv[i].l) - v.begin(); int ind2 = lower_bound(v.begin(), v.end(), vv[i].r + 1LL) - v.begin(); if (vv[i].ty == 0){ for (int i = 0; i < 5; i++){ sum[i] = 0; } q(0, 0, v.size() - 1, ind, ind2); int ind = 0; long long int val = -1LL; long long int S = 0; for (int i = 0; i < 5; i++){ if (val < sum[i]){ val = sum[i]; ind = i; } S += sum[i]; } int countt = 0; for (int i = 0; i < 5; i++){ if (val == sum[i]){ countt++; } } if (countt == 1){ b[ind] += val; } } else{ add(0, 0, v.size() - 1, ind, ind2, vv[i].ty - 1); } //output(); } output(); return 0; }