过样例但全wa求助
查看原帖
过样例但全wa求助
534794
Clot230王凯正楼主2021/10/5 10:43
#include <bits/stdc++.h>
#define ll long long

using namespace std;

const ll N = 1e7 + 9;
inline ll read()
{
	ll x = 0, f = 1;
	char c = getchar();
	while(c > '9' || c < '0')
	{
		if(c == '-')
			f = -1;
		c = getchar();
	}
	while(c >= '0' && c <= '9')
	{
		x = x*10 + c - '0';
		c = getchar();
	}
	return x*f;
}
ll l, t, o;
ll bod[N];
ll pig[N];
ll add[N];
ll sum[N];
char ch;
void pushdown(ll u)
{
	if(add[u] == 0)	
		return ;
	sum[u*2] = add[u];
    sum[u*2 + 1] = add[u];
    add[u*2] = add[u];
    add[u*2 + 1] = add[u];
    add[u] = 0;
}
void build(ll u, ll ul, ll ur)
{
	if(ul == ur)
	{
		sum[u] = 2;
		return ;
	}
	ll mid = ul + (ur - ul)/2;
	build(u*2, ul, mid);
	build(u*2 + 1, mid + 1, ur);
	sum[u] = sum[u*2] + sum[u*2 + 1];
}
void fillin(ll u, ll ul, ll ur, ll l, ll r, ll w)
{
	if(l <= ul && r >= ur)
	{
		sum[u] = (1 << w);
		add[u] = (1 << w);
		return ;
	}
	pushdown(u);
	ll mid = ul + (ur - ul)/2;
	if(l <= mid)
		fillin(u*2, ul, mid, l, r, w);
	if(r > mid)
		fillin(u*2 + 1, mid + 1, ur, l, r, w);
	sum[u] = sum[u*2] + sum[u*2 + 1];
}
ll ans(ll u, ll ul, ll ur, ll l, ll r)
{
	if(l <= ul && r >= ur)
		return sum[u];
	pushdown(u);
	ll mid = ul + (ur - ul)/2;
	ll res = 0;
	if(l <= mid)
		res += ans(u*2, ul, mid, l, r);
	if(r > mid)
		res += ans(u*2 + 1, mid + 1, ur, l, r);
	return res;
}
ll pro(ll x)
{
	ll res = 0;
	while(x)
	{
		if(x%2)
			res++;
		x >>= 1; 
	}
	return res;
}
int main()
{
	l = read();
	t = read();
	o = read();
	build(1, 1, l);
	for(ll i = 1; i <= o; i++)
	{
		ll a, b, c;
		cin >> ch;
		a = read();
		b = read();
		if(a > b)
			swap(a, b);
		if(ch == 'C')
		{
			c = read();
			fillin(1 ,1, l, a, b, c);
		}
		if(ch == 'P')
			printf("%lld\n", pro(ans(1, 1, l, a, b)));	
	}
}
2021/10/5 10:43
加载中...