社区讨论
求助qwq为什么会只有70呀orz
P2161[SHOI2009] 会场预约参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mi6wva8t
- 此快照首次捕获于
- 2025/11/20 12:08 4 个月前
- 此快照最后确认于
- 2025/11/20 12:08 4 个月前
CPP
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <ctime>
#define maxn 100010
using namespace std;
char opt[2];
bool del[maxn],same[maxn<<2];
int ans1,ans2,n,cnt,st,ed;
int ll[maxn<<2],rr[maxn<<2],tag[maxn<<2];
void build(int l,int r,int num)
{
ll[num]=l,rr[num]=r;same[num]=true;
if(l==r) return;
int mid=(l+r)>>1;
build(l,mid,num<<1);
build(mid+1,r,num<<1|1);
}
void pushdown(int num)
{
same[num]=false;
if(!tag[num]) return;
tag[num<<1]=tag[num];
tag[num<<1|1]=tag[num];
tag[num]=0;
}
void modify(int l,int r,int num,int color)
{
if(ll[num]>r||rr[num]<l) return;
if(ll[num]>=l&&rr[num]<=r&&same[num])
{
if(tag[num]&&!del[tag[num]])
ans2--,ans1++,del[tag[num]]=true;
tag[num]=color;
return;
}
pushdown(num);
if(ll[num]>=l&&rr[num]<=r)
same[num]=true,tag[num]=color;
modify(l,r,num<<1,color);
modify(l,r,num<<1|1,color);
}
int main()
{
scanf("%d",&n);
build(1,maxn,1);
while(n--)
{
scanf("%s",opt);
switch(opt[0])
{
case 'A':
{
cnt++;ans2++;ans1=0;
scanf("%d %d",&st,&ed);
modify(st,ed,1,cnt);
printf("%d\n",ans1);
break;
}
case 'B':{printf("%d\n",ans2);break;}
}
}
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...