QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#717549#9544. Grand Prix of Ballanceblhxzjr#ML 0ms0kbC++232.6kb2024-11-06 18:17:052024-11-06 18:17:06

Judging History

你现在查看的是最新测评结果

  • [2024-11-06 18:17:06]
  • 评测
  • 测评结果:ML
  • 用时:0ms
  • 内存:0kb
  • [2024-11-06 18:17:05]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+10;
int n,m,k,q;

struct seg{
	int g,num;
}t[N<<2];
#define ls id<<1
#define rs id<<1|1
#define g(x) t[x].g
#define num(x) t[x].num
inline void up(int id){
	if(num(ls)) g(id)=g(ls);
	if(num(rs)){
		if(g(id)==0) g(id)=g(rs);
		else g(id)=__gcd(g(rs),g(id));
	}
	num(id)=num(ls)+num(rs);
}
inline void build(int id,int l,int r){
	if(l==r){
		g(id)=num(id)=0; return;
	}
	int mid=l+r>>1;
	build(ls,l,mid),build(rs,mid+1,r);
	up(id);
}
void modify(int id,int l,int r,int x,int v){
	if(l==r&&l==x){
		num(id)+=v;
		if(num(id))
		g(id)=x;
		else g(id)=0; 
		return;
	}
	int mid=l+r>>1;
	if(x<=mid) modify(ls,l,mid,x,v);
	else modify(rs,mid+1,r,x,v);
	up(id);
}
vector<int>v(2e5+10,0);
void init(){
	const int g=2e5;
	for(int i=1;i<g;i++){
		for(int j=1;j<=g/i;j++) v[i*j]++;
	}
}
int a[N],b[N];
void solve(){
	cin>>n>>q;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	set<int>st;
	for(int i=2;i<=n;i++){
		if(a[i]<a[i-1]){
			st.insert(i-1);
		}
	}
	int l=0;
	const int h=2e5;
	build(1,1,h);
	for(auto i:st){
		int len=i-l;
		modify(1,1,h,len,1);
		l=i;
	}
	if(!st.empty()){
		cout<<v[g(1)]<<endl;
		modify(1,1,h,n-*st.rbegin(),1);
	}
	else {
		cout<<n<<endl;
		modify(1,1,h,n,1);
	}
	st.insert(0);
	st.insert(n);
	a[0]=0,a[n+1]=2e9+10;
	for(int i=1;i<=q;i++){
		int p,vv; cin>>p>>vv;
		a[p]=vv;
		if(st.count(p)){
			auto c=st.find(p);
			auto d=c;
			auto e=++c;
			--d;
			modify(1,1,h,p-(*d),-1);
			modify(1,1,h,(*e)-p,-1);	
			int qq=*d,hj=*e;
			if(a[p]<a[p-1]&&a[p]>a[p+1]){
				modify(1,1,h,1,1);
				modify(1,1,h,p-1-qq,1);
				modify(1,1,h,hj-p,1);
			}
			else if(a[p]<a[p-1]){
				modify(1,1,h,p-1-qq,1);
				modify(1,1,h,hj-p+1,1);
			}
			else if(a[p]>a[p+1]){
				modify(1,1,h,p-qq,1);
				modify(1,1,h,hj-p,1);
			}
		}
		else{
			auto c=st.lower_bound(p);
			auto d=c;
			auto e=c;
			--d;
			int qq=*d,hj=*e;
			modify(1,1,h,qq-hj,-1);
			if(a[p]<a[p-1]&&a[p]>a[p+1]){
				modify(1,1,h,1,1);
				modify(1,1,h,p-1-qq,1);
				modify(1,1,h,hj-p,1);
			}
			else if(a[p]<a[p-1]){
				modify(1,1,h,p-1-qq,1);
				modify(1,1,h,hj-p+1,1);
			}
			else if(a[p]>a[p+1]){
				modify(1,1,h,p-qq,1);
				modify(1,1,h,hj-p,1);
			}
		}
		auto f=st.find(n);
		--f;
		if(*f!=0){
			modify(1,1,h,n-(*f),-1);
		}
		if(g(1)==n){
			cout<<n<<endl;
		}
		else 
		{
			int j=1;
			cout<<v[g(1)]<<endl;
		}
		
	}
}
signed main(){
	ios::sync_with_stdio(0),cin.tie(0);
	int t; cin>>t;
	init();
	while(t--) solve();
	return 0;
} 

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Memory Limit Exceeded

input:

3
3 4 6
1 2
2 1 1
2 2 2
3 3 2
2 3 2
2 1 2
3 4 8
1 2
2 1 1
2 2 2
3 3 2
2 3 2
2 1 2
1 1
2 1 1
3 4 7
1 2
2 1 1
2 2 2
3 3 2
2 3 2
2 1 2
1 1

output:

1

result: