标签:style os io for 问题 ar 代码 amp
思路:这题比赛的时候宝哥说的思路我觉得对的,就是当是2操作的时候,先把数放到数组里,最后查询输出的时候再统一计算,不过那时敲得烂死了,debug了两天,靠……
上午写的vector在pushDown的时候又忘了clear了,然后MLE了一早上,尼玛,还以为用的数组太大超了,然后又改成结构体,还是MLE,最后把别人的代码交上去发现没MLE,疯了一中午,最后无聊的时候才发现这个错误,尼玛……发现自己调试怎么变得这么弱了呢……
还有一个需要注意的问题是1与2操作的处理上比较容易出错,这也是我WA了一下午的原因……唉……
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#include<queue>
#include<set>
#include<cmath>
#include<bitset>
#define mem(a,b) memset(a,b,sizeof(a))
#define lson i<<1,l,mid
#define rson i<<1|1,mid+1,r
#define INF 510010
#define maxn 400010
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
int key[maxn];
short lazy[maxn];
vector<int>ve[maxn];
int n,m;
int gcd(int a,int b)
{
return !b?a:gcd(b,a%b);
}
void pushdown(int i,int l,int r)
{
if(l==r) return ;
if(lazy[i]==1)
{
key[i<<1]=key[i<<1|1]=key[i];
lazy[i<<1]=lazy[i<<1|1]=lazy[i];
ve[i<<1]=ve[i<<1|1]=ve[i];
lazy[i]=0;
}
else
{
for(int j=0; j<ve[i].size(); j++)
{
ve[i<<1].push_back(ve[i][j]);
ve[i<<1|1].push_back(ve[i][j]);
}
}
ve[i].clear();
}
void update(int i,int l,int r,int L,int R,int v,int c)
{
pushdown(i,l,r);
if(L==l&&r==R)
{
if(c==1) lazy[i]=1,key[i]=v,ve[i].clear();
else ve[i].push_back(v);
return ;
}
int mid=(l+r)>>1;
if(R<=mid) update(lson,L,R,v,c);
else if(L>mid) update(rson,L,R,v,c);
else
{
update(lson,L,mid,v,c);
update(rson,mid+1,R,v,c);
}
}
void query(int i,int l,int r)
{
pushdown(i,l,r);
if(l==r)
{
for(int j=0; j<ve[i].size(); j++)
{
if(key[i]>ve[i][j])
key[i]=gcd(key[i],ve[i][j]);
if(key[i]==1) break;
}
printf("%d ",key[i]);
return ;
}
int mid=(l+r)>>1;
query(lson);
query(rson);
}
void build(int i,int l,int r)
{
key[i]=lazy[i]=0;
ve[i].clear();
if(l==r)
{
scanf("%d",&key[i]);
return ;
}
int mid=(l+r)>>1;
build(lson);
build(rson);
}
void debug(int i,int l,int r )
{
printf("结点:%3d 范围:%3d~~%3d 传值:%11d 标记:%3d\n",i,l,r,key[i],lazy[i]);
if(l==r) return ;
int mid=(l+r)>>1;
debug(lson);
debug(rson);
}
int main()
{
//freopen("test.txt","r",stdin);
int t;
cin>>t;
while(t--)
{
int i;
scanf("%d",&n);
build(1,1,n);
scanf("%d",&m);
while(m--)
{
int c,l,r,x;
scanf("%d%d%d%d",&c,&l,&r,&x);
update(1,1,n,l,r,x,c);
//debug(1,1,n);
//puts("");
}
query(1,1,n);
puts("");
}
return 0;
}
多校第4场 HDU 4902 Nice boat 线段树,布布扣,bubuko.com
标签:style os io for 问题 ar 代码 amp
原文地址:http://blog.csdn.net/u011466175/article/details/38348267