20分求助dalao
查看原帖
20分求助dalao
425268
feice楼主2021/10/9 20:56
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+5;
ll n;
struct node{
	ll l,r,sum,tot;
}a[N];
stack<int>s;
int main(){
//	freopen("r.in","r",stdin);
//	freopen("rs.out","w",stdout);
	scanf("%lld",&n);
	for(int i=1;i<=n;++i){
		int ju;
		ll ans=0;
		scanf("%d",&ju);
		if(ju==1){
			int l,r;
			scanf("%d%d",&l,&r);
			s.push(i);
			a[i].l=l,a[i].r=r,a[i].tot=r-l+1;
			a[i].sum=((r+1)*r)/2-(l*(l-1))/2;
		}
		if(ju==2){
			long long k,la;
			scanf("%lld",&k);
			while(k){
				int r=s.top();
				s.pop();
				if(k>=a[r].tot){
					k-=a[r].tot;
					ans+=a[r].sum;
//					printf("%lld %lld\n",k,ans);
				}
				else{
					a[r].tot-=k;
					k=0;
					ans+=(a[r].r*(a[r].r+1))/2;
					a[r].r=a[r].l+a[r].tot-1;
					ans-=(a[r].r*(a[r].r+1))/2;
					s.push(r);
					a[r].sum=((a[r].r+1)*a[r].r)/2-(a[r].l*(a[r].l))/2;
//					printf("%d %d %d %d\n",a[r].l,a[r].r,a[r].tot,a[r].sum);
				}
			}
			printf("%lld\n",ans);
		}
	}
}
2021/10/9 20:56
加载中...