社区讨论

求助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 条回复,欢迎继续交流。

正在加载回复...