首页 > 其他分享 >做题记录整理数据结构/线段树3 P3822 [NOI2017] 整数(2022/10/17)

做题记录整理数据结构/线段树3 P3822 [NOI2017] 整数(2022/10/17)

时间:2022-10-17 17:12:41浏览次数:89  
标签:aa 10 set bb 17 int else NOI2017 zz

P3822 [NOI2017] 整数

为什么这玩意是双tag呢

因为他按理来说正解是用线段树来做的,但是有很多题解都是直接上set搞的,所以就两个tag都打上了

首先我们可以想到用bitset来表示这个整数,然后我们就会发现所谓的修改直接暴力改就完事

然后正负分开记录,询问的时候在加起来

若当前位相同,后缀非负则答案为 0,否则为 1。

若当前位不同,后缀非负则答案为 1,否则为 0。

我们会发现它大部分时候其实都是相同的,我们可以用set记录正负数组不同的位置。

#include<bits/stdc++.h>
#define for1(i,a,b) for(int i = a;i<=b;i++)
#define ll long long
#define mp(a,b) make_pair(a,b)
using namespace std;
set<int>s;
set <int>::iterator ji; 
bitset<30005005>aa,bb;

void rua(int x,int v)
{
	int zz=v,l=v+1,r=0;
	while(x)
	{
		int ad=(x&1);
		zz++;
		if(ad)
		if(aa[zz])
			{
			    aa.set(zz,0);
			    x++;
			}
			else aa.set(zz,1);
		x>>=1;
	}
	r=zz;
	for1(i,l,r)
	{
		if(aa[i]^bb[i])
		    s.insert(i);
		else s.erase(i);
	}
}
void rub(int x,int v)
{
	int zz=v,l=v+1,r=0;
	while(x)
	{
		int ad=(x&1);
		zz++;
		if(ad)
			if(bb[zz])
			{
			    bb.set(zz,0);
		    	x++;
			}
			else bb.set(zz,1);
		x>>=1;
	}
	r=zz;
	for1(i,l,r)
	{
		if(aa[i]^bb[i])
		    s.insert(i);
		else 
		    s.erase(i);
	}
}
void add(int x,int v)
{
	if(x>0) 
	    rua(x,v);
	else 
	    rub(-x,v); 
	return ;
}
void ask(int x)
{
	int pd1,pd2;
	ji=s.lower_bound(x);
	ji--;
    pd1=(aa[x]^bb[x])? 1:0;
	pd2=(aa[*ji]<bb[*ji])? 1:0;
	if(pd1^pd2)
	puts("1");
	else
	puts("0");
}
int main()
{
    int n,t,a,b;
	cin>>n>>t>>t>>t;
	s.insert(0);
	s.insert(30*n+50);
	for1(i,1,n)
	{
		scanf("%d%d",&t,&a);
		if(t==1)
		{
			scanf("%d",&b);
			add(a,b);
		}
		else
			ask(++a);
	}
}

标签:aa,10,set,bb,17,int,else,NOI2017,zz
From: https://www.cnblogs.com/yyx525jia/p/16799831.html

相关文章

  • 10秒搞定流程图绘制(真题)
    案例来源:第19套真题说明:本题的流程图想要严丝合缝的绘制出来,会占用大量的时间和精力,10秒搞定怎么做到?操作步骤:1.绘制画布,插入任意形状。2.右击形状,添加文字。3.剪切文字,一股......
  • vue-10 router路由
    配置:安装使用npminstallvue-router添加路由配置文件,例router.js并在文件中进行路由配置将路由配置添加到main.js中的vue对象使用路由router.js文件//1、引入基......
  • 循环控制~17 斐波那契数列
    题目描述:K=1,1,2,3,5,8,13,21...输入:输入一行,包含一个正整数k。(1<=k<=46)输出:输出一行,包含一个正整数,表示菲波那契数列中第k个数的大小1#include<stdio.h>2intmai......
  • ctfshow web101(反射类Reflectionclass的使用)
    <?php/*#-*-coding:utf-8-*-#@Author:h1xa#@Date:2020-09-1611:25:09#@LastModifiedby:h1xa#@LastModifiedtime:2020-09-2200:26:48#@link......
  • 查询效率提升10倍!3种优化方案,帮你解决MySQL深分页问题
    开发经常遇到分页查询的需求,但是当翻页过多的时候,就会产生深分页,导致查询效率急剧下降。有没有什么办法,能解决深分页的问题呢?本文总结了三种优化方案,查询效率直接提升10......
  • 【2022-10-09】连岳摘抄
    23:59如果一个社会,每个人给予社会的略多于他从社会拿走的,那么这个社会就会兴旺起来。                          ......
  • 一次磁盘占用率 100% 的排查记录
    一次磁盘占用率100%的排查记录你好,我是悟空。最近遇到一个服务器的问题:磁盘满了,占用率100%~这个问题太常见了,于是先来排查一波是哪些文件占用了大量磁盘。一、排查磁......
  • E10——凭证报表序号按流水自然排序
            introwIndex;privatevoidGroupHeader1_AfterPrint(objectsender,System.EventArgse){rowIndex=0;}privatevoidtableCell1_......
  • 自选股 2022年10月17日
    1.002559亚威股份2.603011合锻智能3.300260新莱应材4.002371北方华创5.603100川仪股份6.002737葵花药业7.002489浙江永强8.300789唐源电气9.603969银龙股份10.002......
  • winioctl.h(10326): [C4668] 没有将“_WIN32_WINNT_WIN10_TH2”定义为预处理器宏,用
    一般为Windows中的宏和UE4冲突所致在模块的xxx.Build.cs里面添加这个:bEnableUndefinedIdentifierWarnings=false;转自:https://blog.csdn.net/boonti/article/detail......