結果

問題 No.230 Splarraay スプラレェーイ
ユーザー Kmcode1Kmcode1
提出日時 2015-06-19 22:56:47
言語 C++11
(gcc 11.4.0)
結果
WA  
実行時間 -
コード長 2,532 bytes
コンパイル時間 2,635 ms
コンパイル使用メモリ 102,260 KB
実行使用メモリ 11,904 KB
最終ジャッジ日時 2024-07-07 04:10:52
合計ジャッジ時間 4,076 ms
ジャッジサーバーID
(参考情報)
judge4 / judge5
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
6,812 KB
testcase_01 AC 1 ms
6,944 KB
testcase_02 AC 1 ms
6,944 KB
testcase_03 AC 2 ms
6,944 KB
testcase_04 AC 1 ms
6,940 KB
testcase_05 WA -
testcase_06 WA -
testcase_07 WA -
testcase_08 WA -
testcase_09 WA -
testcase_10 WA -
testcase_11 WA -
testcase_12 WA -
testcase_13 WA -
testcase_14 AC 25 ms
7,808 KB
testcase_15 WA -
testcase_16 WA -
testcase_17 WA -
testcase_18 AC 48 ms
11,648 KB
testcase_19 WA -
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:94:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   94 |         scanf("%d", &n);
      |         ~~~~~^~~~~~~~~~
main.cpp:96:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   96 |         scanf("%d", &qq);
      |         ~~~~~^~~~~~~~~~~
main.cpp:102:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  102 |                 scanf("%d", &ty);
      |                 ~~~~~^~~~~~~~~~~
main.cpp:105:30: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  105 |                         scanf("%d%d", &l, &r);
      |                         ~~~~~^~~~~~~~~~~~~~~~
main.cpp:119:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  119 |                 scanf("%d%d", &l, &r);
      |                 ~~~~~^~~~~~~~~~~~~~~~

ソースコード

diff #

#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
int n;
int w;
struct st{
	int sum = 0;
	int lazy = -1;
	int a = 0;
	int b = 0;
};
st seg[MAX * 4];
void update(int a){
	if (seg[a].lazy != -1){
		if (seg[a].lazy == 0){
			seg[a].a = seg[a].sum;
			seg[a].b = 0;
		}
		else{
			seg[a].a = 0;
			seg[a].b = seg[a].sum;
		}
		seg[a * 2 + 1].lazy = seg[a].lazy;
		seg[a * 2 + 2].lazy = seg[a].lazy;
		seg[a].lazy = -1;
	}
}
inline void init(int b, int l, int r){
	seg[b].sum = r - l;
	if (l + 1 == r){
		return;
	}
	init(b * 2 + 1, l, (l + r) >> 1);
	init(b * 2 + 2, (l + r) >> 1, r);
}
inline void add(int b, int l, int r, int ll, int rr,int x){
	update(b);
	if (ll <= l&&r <= rr){
		seg[b].lazy = x;
		update(b);
		return;
	}
	if (r<=ll || rr <= l){
		return;
	}
	add(b * 2 + 1, l, (l + r) >> 1, ll, rr, x);
	add(b * 2 + 2, (l + r) >> 1, r, ll, rr, x);
	seg[b].a = seg[b * 2 + 1].a + seg[b * 2 + 2].a;
	seg[b].b = seg[b * 2 + 1].b + seg[b * 2 + 2].b;
	seg[b].lazy = -1;
}
inline pair<int, int> q(int b, int l, int r, int ll, int rr){
	update(b);
	if (r <= ll || rr <= l){
		return make_pair(0, 0);
	}
	if (ll <= l&&r <= rr){
		return make_pair(seg[b].a, seg[b].b);
	}
	pair<int, int> R;
	R = q(b * 2 + 1, l, (l + r) >> 1, ll, rr);
	pair<int, int> f = q(b * 2 + 2, (l + r) >> 1, r, ll, rr);
	R.first += f.first;
	R.second += f.second;
	return R;
}

int main(){
	scanf("%d", &n);
	int qq;
	scanf("%d", &qq);
	long long int ans = 0;
	long long int ans1 = 0;
	init(0, 0, n);
	while (qq--){
		int ty;
		scanf("%d", &ty);
		if (ty == 0){
			int l, r;
			scanf("%d%d", &l, &r);
			pair<int, int> k = q(0, 0, n, l, r + 1);
			if (k.first == k.second){
				continue;
			}
			if (k.first > k.second){
				ans += (long long int)(k.first);
			}
			else{
				ans += (long long int)(k.second);
			}
			continue;
		}
		int l, r;
		scanf("%d%d", &l, &r);
		if (ty == 1){
			add(0, 0, n, l, r + 1, 0);
		}
		else{
			add(0, 0, n, l, r + 1, 1);
		}
	}
	pair<int, int> k = q(0, 0, n, 0, n);
	ans += (long long int)(k.first);
	ans1 += (long long int)(k.second);
	printf("%lld %lld\n", ans, ans1);
	return 0;
}
0