蒟蒻萌新求救
查看原帖
蒟蒻萌新求救
546558
Land_ER楼主2021/9/20 20:19

我可能是太笨了吧

#include<cstdio>
using namespace std;
inline int sum(int l,int r){
    return (l+r)*(r-l+1)/2;
}
struct A
{
    int l,r;
};
A list[500000];int list_len;

void push(int l,int r){
    list[list_len].l = l;
    list[list_len].r = r;
    ++ list_len;
}
int pop(int k){
    int a;
    if(list[list_len-1].r - list[list_len-1].l + 1 > k)
    {
        a = sum(list[list_len-1].r - k + 1,list[list_len-1].r);
        list[list_len-1].r -= k;
        return a;
    }
    else
    {
        a = sum(list[list_len-1].l,list[list_len-1].r);
        k -= list[list_len-1].r - list[list_len].l + 1;
        -- list_len;
        a += pop(k);
        return a;
    }
}
int main(void){
    int n,opera,num1,num2,ret;
    scanf("%d",&n);
    for(int i = 0;i < n;++ i)
    {
        scanf("%d",&opera);
        if(opera == 1)
        {
            scanf("%d%d",&num1,&num2);
            push(num1,num2);
        }
        else
        {
            scanf("%d",&num1);
            ret = pop(num1);
            printf("%d ",ret);
        }
    }
    return 0;
}
2021/9/20 20:19
加载中...