Homework Introduction

#include <bits/stdc++.h>
using namespace std;
const int N = 5e5+5;
int n,m,a[N];
int tree[N<<2];
void pushup(int rt){
	tree[rt] = tree[rt*2] + tree[rt*2+1];
}
void build(int l,int r,int rt){
	if(l==r){
		tree[rt] = a[l];
		return;
	}
	int mid = (l+r)>>1;
	build(l,mid,rt*2);
	build(mid+1,r,rt*2+1);
	pushup(rt);
}
void update(int l,int r,int rt,int p,int c){
	if(l==r){
		tree[rt]+=c;
		return;
	}
	int mid = (l+r)/2;
	if(p<=mid)update(l,mid,rt<<1,p,c);
	else update(mid+1,r,rt<<1|1,p,c);
	pushup(rt);
}
int query(int l,int r,int rt,int L,int R)
{
	//L---l---r--R
	if(L<=l && r<=R){
		return tree[rt];
	}
	int res = 0;
	int mid = (l+r)>>1;
	if(L<=mid)res+=query(l,mid,rt<<1,L,R);
	if(R>mid)res+=query(mid+1,r,rt<<1|1,L,R);
	return res;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	build(1,n,1);
	for(int i=1;i<=m;i++){
		int op,x,y,z;
		cin>>op>>x>>y;
		if(op==1){
			update(1,n,1,x,y);
		}
		else{
			cout<<query(1,n,1,x,y)<<endl;
		}
	}
	return 0;
}
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e5+5;
int T,n,m,tree[N<<2];
void pushup(int rt){
	tree[rt] = tree[rt<<1]*tree[rt<<1|1];
	tree[rt]%=m;
}
void build(int l,int r,int rt){
	if(l==r){
		tree[rt] = 1;
		return;
	}
	int mid = (l+r)>>1;
	build(l,mid,rt<<1);
	build(mid+1,r,rt<<1|1);
	pushup(rt);
}
void change(int l,int r,int rt,int p){
	if(l==r){
		tree[rt] = 1;
		return;
	}
	int mid = (l+r)>>1;
	if(p<=mid)change(l,mid,rt<<1,p);
	else change(mid+1,r,rt<<1|1,p);
	pushup(rt);
}
void update(int l,int r,int rt,int p,int c){
	if(l==r){
		if(c>0)tree[rt]*=c;
		return;
	}
	int mid = (l+r)>>1;
	if(p<=mid)update(l,mid,rt<<1,p,c);
	else update(mid+1,r,rt<<1|1,p,c);
	pushup(rt);
}
signed main(){
	cin>>T;
	while(T--){
		cin>>n>>m;
		build(1,n,1);
		
		for(int i=1;i<=n;i++){
			int op,x;
			cin>>op>>x;
			if(op==1){
				update(1,n,1,i,x);
				cout<<tree[1]%m<<endl;
			}
			else{
				change(1,n,1,x);
				cout<<tree[1]%m<<endl;
			}
		}
	}
	return 0;
}
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e5+5;
int n,m,c;
int tree[N<<2],tag[N<<2];
struct node{
	int s,t,k;
}p[N];
bool cmp(node a,node b){
	if(a.t==b.t)return a.s<b.s;
	return a.t<b.t;
}
void pushup(int rt){
	tree[rt] = max(tree[rt<<1],tree[rt<<1|1]);
}
void pushdown(int rt){
	if(tag[rt]){
		tag[rt<<1] += tag[rt];
		tag[rt<<1|1] += tag[rt];
		tree[rt<<1] += tag[rt];
		tree[rt<<1|1] += tag[rt];
		tag[rt] = 0;
	}
}
void update(int l,int r,int rt,int L,int R,int c)
{
	if(L<=l && r<=R){
		tree[rt]+=c;
		tag[rt]+=c;
		return;
	}
	pushdown(rt);
	int mid = (l+r)>>1;
	if(L<=mid)update(l,mid,rt<<1,L,R,c);
	if(R>mid)update(mid+1,r,rt<<1|1,L,R,c);
	pushup(rt);
}
int query(int l,int r,int rt,int L,int R){
	if(L<=l && r<=R){
		return tree[rt];
	}
	int res = 0;
	pushdown(rt);
	int mid = (l+r)>>1;
	if(L<=mid)res=max(res,query(l,mid,rt<<1,L,R));
	if(R>mid)res = max(res,query(mid+1,r,rt<<1|1,L,R));
	return res;
}
signed main(){
	cin>>n>>m>>c;
	for(int i=1;i<=n;i++){
		cin>>p[i].s>>p[i].t>>p[i].k;
	}
	int res = 0;
	sort(p+1,p+n+1,cmp);
	for(int i=1;i<=n;i++){
		int l=p[i].s,r=p[i].t,k=p[i].k;
		int Max = query(1,m,1,l,r-1);
		if(Max>=c)continue;
		else {
			if(Max+k<=c){
				res+=k;
				update(1,m,1,l,r-1,k);
			}
			else{
				res+=c-Max;
				update(1,m,1,l,r-1,c-Max);
			}
		}
	}
	cout<<res<<endl;
	return 0;
}
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e5+5;
int n,m,tree[N<<2],tag[N<<2],a[N];
void pushup(int rt){
	tree[rt] = tree[rt<<1] + tree[rt<<1|1];
}
void pushdown(int l,int r,int rt){
	if(tag[rt]){
		tag[rt<<1] += tag[rt];
		tag[rt<<1|1] += tag[rt];
		int mid = (l+r)>>1;
		tree[rt<<1] += tag[rt]*(mid-l+1);
		tree[rt<<1|1] += tag[rt]*(r-mid);
		tag[rt] = 0;
	}
}
void build(int l,int r,int rt){
	if(l==r){
		tree[rt] = a[l];
		return;
	}
	int mid = (l+r)>>1;
	build(l,mid,rt<<1);
	build(mid+1,r,rt<<1|1);
	pushup(rt);
}
void update(int l,int r,int rt,int L,int R,int c){
	if(L<=l && r<=R){
		tree[rt]+=c*(r-l+1);
		tag[rt]+=c;
		return;
	}
	pushdown(l,r,rt);
	int mid = (l+r)>>1;
	if(L<=mid)update(l,mid,rt<<1,L,R,c);
	if(R>mid)update(mid+1,r,rt<<1|1,L,R,c);
	pushup(rt);
}
int query(int l,int r,int rt,int L,int R){
	if(L<=l && r<=R){
		return tree[rt];
	}
	int mid = (l+r)>>1;
	pushdown(l,r,rt);
	int res = 0;
	if(L<=mid)res+=query(l,mid,rt<<1,L,R);
	if(R>mid)res+=query(mid+1,r,rt<<1|1,L,R);
	return res;
}
signed main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	build(1,n,1);
	while(m--){
		int op,x,y,z;
		cin>>op>>x>>y;
		if(op==1){
			cin>>z;
			update(1,n,1,x,y,z);
		}
		else{
			cout<<query(1,n,1,x,y)<<endl;
		}
	}
	return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+5;
double a[N],tree1[N<<2],tree2[N<<2],tag[N<<2];
int n,m;
void pushup(int rt)
{
	tree1[rt] = tree1[rt<<1]+tree1[rt<<1|1];
	tree2[rt] = tree2[rt<<1]+tree2[rt<<1|1];
}
void pushdown(int l,int r,int rt)
{
	if(tag[rt]!=0){
		tag[rt<<1]+=tag[rt];
		tag[rt<<1|1]+=tag[rt];
		int mid = (l+r)>>1;
		tree2[rt<<1] = tree2[rt<<1] + 2*tag[rt]*tree1[rt<<1] + tag[rt]*tag[rt]*(mid-l+1);
		tree2[rt<<1|1] = tree2[rt<<1|1] + 2*tag[rt]*tree1[rt<<1|1] + tag[rt]*tag[rt]*(r-mid);
		tree1[rt<<1] += tag[rt]*(mid-l+1);
		tree1[rt<<1|1] += tag[rt]*(r-mid);
		tag[rt] = 0;
	}
}
void build(int l,int r,int rt)
{
	if(l==r){
		tree1[rt] = a[l];
		tree2[rt] = a[l]*a[l];
		return;
	}
	int mid = (l+r)>>1;
	build(l,mid,rt<<1);
	build(mid+1,r,rt<<1|1);
	pushup(rt);
}
void update(int l,int r,int rt,int L,int R,double c)
{
	if(L<=l && r<=R){
		tag[rt]+=c;
		tree2[rt] = tree2[rt]+2*c*tree1[rt] + c*c*(r-l+1);
		tree1[rt] += c*(r-l+1);
		return;
	}
	pushdown(l,r,rt);
	int mid = (l+r)>>1;
	if(L<=mid)update(l,mid,rt<<1,L,R,c);
	if(R>mid)update(mid+1,r,rt<<1|1,L,R,c);
	pushup(rt);
}
double query1(int l,int r,int rt,int L,int R)
{
	double sum = 0;
	if(L<=l && r<=R){
		return tree1[rt];
	}
	pushdown(l,r,rt);
	int mid = (l+r)>>1;
	if(L<=mid)sum+=query1(l,mid,rt<<1,L,R);
	if(R>mid)sum+=query1(mid+1,r,rt<<1|1,L,R);
	return sum; 
}
double query2(int l,int r,int rt,int L,int R)
{
	if(L<=l && r<=R){
		return tree2[rt];
	}
	pushdown(l,r,rt);
	double sum = 0;
	int mid = (l+r)>>1;
	if(L<=mid)sum+=query2(l,mid,rt<<1,L,R);
	if(R>mid)sum+=query2(mid+1,r,rt<<1|1,L,R);
	return sum;
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)cin>>a[i];
	build(1,n,1);
	for(int i=1;i<=m;i++){
		int pos,x,y;
		cin>>pos;
		if(pos==1){
			double z;
			cin>>x>>y>>z;
			update(1,n,1,x,y,z);
		}
		if(pos==2){
			cin>>x>>y;
			double sum = query1(1,n,1,x,y);
			cout<<fixed<<setprecision(4)<<sum/(y-x+1)<<endl;
		}
		if(pos==3){
			cin>>x>>y;
			double sum1 = query1(1,n,1,x,y);
			double ave = sum1/(y-x+1);
			double sum2 = query2(1,n,1,x,y);
			double len = (y-x+1);
			cout<<fixed<<setprecision(4)<<(sum2-2*sum1*ave+len*ave*ave)/len<<endl;
		}
	}
	return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5+5;
int n,m;
struct node{
	int l,r,cnt,flag;
	friend node operator + (node a,node b){
		node c;
		if(a.flag==1)c.l = b.l;
		else c.l = a.l;
		if(b.flag==1)c.r=a.r;
		else c.r = b.r;
		c.cnt = a.cnt+b.cnt + (a.r==1&&b.l==1);
		if(a.flag==1 && b.flag==1)c.flag = 1;
		else c.flag = 0;
		return c;
	}
}tree[N<<2];
void pushup(int rt){
	tree[rt] = tree[rt<<1] + tree[rt<<1|1];
}
void build(int l,int r,int rt){
	if(l==r){
		if(l==1)tree[rt] = {0,1,0,0};
		else if(l==n)tree[rt] = {1,0,0,0};
		else tree[rt] = {0,0,0,1};
		return;
	}
	int mid = (l+r)>>1;
	build(l,mid,rt<<1);
	build(mid+1,r,rt<<1|1);
	pushup(rt);
}
void update(int l,int r,int rt,int p,char c){
	if(l==r){
		if(c=='X'){
			tree[rt] = {0,0,0,1};
		}
		else if(c=='('){
			tree[rt] = {0,1,0,0};
		}
		else if(c==')'){
			tree[rt] = {1,0,0,0};
		}
		return;
	}
	int mid = (l+r)>>1;
	if(p<=mid)update(l,mid,rt<<1,p,c);
	else update(mid+1,r,rt<<1|1,p,c);
	pushup(rt);
}
node query(int l,int r,int rt,int L,int R){
	if(L<=l && r<=R){
		return tree[rt];
	}
	int mid = (l+r)>>1;
	if(R<=mid)return query(l,mid,rt<<1,L,R);
	else if(L>mid)return query(mid+1,r,rt<<1|1,L,R);
	else return query(l,mid,rt<<1,L,R)+query(mid+1,r,rt<<1|1,L,R);
}
int main(){
	cin>>n>>m;
	build(1,n,1);
	for(int i=1;i<=m;i++){
		int op,x,y;
		char c;
		cin>>op>>x;
		if(op==1){
			cin>>c;
			update(1,n,1,x,c);
		}
		else{
			cin>>y;
			node tmp = query(1,n,1,x,y);
			cout<<tmp.cnt<<endl;
		}
	}
	return 0;
}
Status
Done
Problem
21
Open Since
2026-2-26 0:00
Deadline
2026-3-5 23:59
Extension
24 hour(s)