萌新刚学OI,只有10分,求助
查看原帖
萌新刚学OI,只有10分,求助
93292
离子键Ionic_Bond楼主2020/11/13 19:42

RT

#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<string>
#include<queue>
#include<vector>
#include<cctype>
#include<map>
#define re register int
#define il inline
#define Te template
#define ll long long
#define elif else if
#define N1 15
#define N2 105
#define N3 1005
#define N4 10005
#define N5 100005
#define N6 1000005
#define N7 10000005
#define N8 100000005

using namespace std;

Te <typename R> R read(R &x){
	x=0;
	char c=getchar();R f=1;
	for(;!isdigit(c);c=getchar())if(c=='-')f=-1;
	for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+(c^48);
	return x=x*f;
}

Te <typename W> void write(W x){
	if(x<0)x=(~x)|1,putchar('-');
	if(x>9)write(x/10);
	putchar((x-(x/10)*10)+48);
}

/*Variables*/
int n,m;
ll a[N5],b[N5];
int blk,cnt;
/*Functions*/

/*---*/
int main(){
	freopen("P4145_2.in","r",stdin);
	freopen("MY.out","w",stdout);
	read(n);
	blk=sqrt(n);
	for(int i=1;i<=n;i++){
		read(a[i]);
		b[(i-1)/blk+1]+=a[i];
	}
	read(m);
	for(;m--;){
		int k;
		read(k);
		if(k==0){
			int l,r;
			read(l),read(r);
			for(int i=l;i<=r;i+=blk){
				cnt=(i-1)/blk+1;
				if(b[cnt]==blk)continue;				
				for(int j=max(blk*(cnt-1)+1,l);j<=blk*cnt&&j<=r;j++){
					ll ud=sqrt(a[j]);
					b[cnt]-=a[j]-ud;
					a[j]=ud;
				}
			}
		/*	putchar('[');
			for(int i=1;i<=n;i++){
				printf("(%lld %lld),",a[i],b[(i-1)/blk+1]);
			}
			puts("]");*/
		}
		if(k==1){
			int l,r;
			read(l),read(r);
			ll ans=0;
			for(int i=l;i<=r;i+=blk){
		///		printf("---%d---\n",i);
				cnt=(i-1)/blk+1;
				
				if(i==l){
					for(int j=l;j<=cnt*blk&&j<=r;j++){
						ans+=a[j];
					}
		//			printf("[%d]\n",ans);
					continue;
				}
				if(r-i+1<=blk){
		//			puts("");
		//			printf("%d %d\n",cnt,blk);
					for(int j=(cnt-1)*blk+1;j<=r;j++){
						ans+=a[j];
		//				printf("[%d) ",a[j]);
					}
					continue;
				}
				ans+=b[cnt];
	//			printf("[%d]\n",ans);		
			}
			printf("%lld\n",ans);
		}
	}
}


2020/11/13 19:42
加载中...