結果

問題 No.230 Splarraay スプラレェーイ
ユーザー hirokazu1020hirokazu1020
提出日時 2015-06-19 23:41:29
言語 C++11
(gcc 11.4.0)
結果
WA  
実行時間 -
コード長 2,828 bytes
コンパイル時間 728 ms
コンパイル使用メモリ 82,380 KB
実行使用メモリ 6,948 KB
最終ジャッジ日時 2024-07-07 04:26:31
合計ジャッジ時間 3,385 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
5,248 KB
testcase_01 AC 2 ms
5,376 KB
testcase_02 AC 1 ms
5,376 KB
testcase_03 AC 1 ms
5,376 KB
testcase_04 AC 1 ms
5,376 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 WA -
testcase_15 WA -
testcase_16 AC 222 ms
5,376 KB
testcase_17 WA -
testcase_18 AC 258 ms
5,376 KB
testcase_19 WA -
権限があれば一括ダウンロードができます

ソースコード

diff #

#include<sstream>
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<string>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<numeric>
#include<functional>
#include<algorithm>
using namespace std;
#define INF (1<<29)
#define rep(i,n) for(int i=0;i<(int)(n);i++)
#define all(v) v.begin(),v.end()
#define uniq(v) v.erase(unique(all(v)),v.end())
#define indexOf(v,x) (find(all(v),x)-v.begin())


#if defined(_MSC_VER)||defined(__SSE4_2__)
#include<nmmintrin.h>
#elif defined(__GNUC__)
static inline int32_t __attribute__((always_inline))
_mm_popcnt_u32(uint32_t x){
	int32_t result;
	__asm__("popcnt %1, %0" : "=r" (result) : "r" (x));
	return result;
}
#endif
int popcount32(unsigned int x){
	return _mm_popcnt_u32(x);
}


int main(){
	int b[3125],painted[3125]={};
	int n,q;
	int bonusA=0,bonusB=0;
	cin>>n>>q;
	rep(_,q){
		int x,s,t,mask,p;
		cin>>x>>s>>t;
		if(x==0){
			int areaA=0,areaB=0;
			if(s/32==t/32){
				for(int i=s;i<=t;i++){
					if(painted[s/32]>>(i&31)&1){
						if(b[s/32]>>(i&31)&1)areaA++;
						else areaB++;
					}
				}
			}else{
				if((s&31)!=0){
					mask=~((1<<(s&31))-1);
					areaA += _mm_popcnt_u32(painted[s/32]&b[s/32]&mask);
					areaB += _mm_popcnt_u32(painted[s/32]&~b[s/32]&mask);
				}
				for(int i=s==0?0:(s-1)/32+1;i<=(t+1)/32-1;i++){
					areaA += _mm_popcnt_u32(painted[i]&b[i]);
					areaB += _mm_popcnt_u32(painted[i]&~b[i]);
				}
				if((t&31)!=31){
					mask=(1<<(t&31)+1)-1;
					areaA += _mm_popcnt_u32(painted[s/32]&b[s/32]&mask);
					areaB += _mm_popcnt_u32(painted[s/32]&~b[s/32]&mask);
				}
			}
			if(areaA>areaB)bonusA+=areaA;
			else if(areaA<areaB)bonusB+=areaB;
		}else if(x==1){
			if(s/32==t/32){
				for(int i=s;i<=t;i++){
					painted[s/32] |= 1<<(i&31);
					b[s/32] |= 1<<(i&31);
				}
			}else{
				if((s&31)!=0){
					mask=~((1<<(s&31))-1);
					b[s/32] = (b[s/32]&~mask) | mask;
					painted[s/32] |= mask;
				}
				for(int i=s==0?0:(s-1)/32+1;i<=(t+1)/32-1;i++){
					b[i] = ~0;
					painted[i] = ~0;
				}
				if((t&31)!=31){
					mask=(1<<(t&31)+1)-1;
					b[t/32] = (b[t/32]&~mask) | mask;
					painted[t/32] |= mask;
				}
			}
		}else{
			if(s/32==t/32){
				for(int i=s;i<=t;i++){
					painted[s/32] |= 1<<(i&31);
					b[s/32] &= ~(1<<(i&31));
				}
			}else{
				if((s&31)!=0){
					mask=~((1<<(s&31))-1);
					b[s/32] = (b[s/32]&~mask);
					painted[s/32] |= mask;
				}
				for(int i=s==0?0:(s-1)/32+1;i<=(t+1)/32-1;i++){
					b[i] = 0;
					painted[i] = ~0;
				}
				if((t&31)!=31){
					mask=(1<<(t&31)+1)-1;
					b[t/32] = (b[t/32]&~mask);
					painted[t/32] |= mask;
				}
			}
		}
	}
	int scoreA=0,scoreB=0;
	rep(i,3125){
		scoreA += _mm_popcnt_u32(painted[i]&b[i]);
		scoreB += _mm_popcnt_u32(painted[i]&~b[i]);
	}
	cout<<scoreA+bonusA<<' '<<scoreB+bonusB<<endl;
	return 0;
}
0