QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#735015#9543. Good PartitionsCCFCompile Error//C++143.0kb2024-11-11 16:40:592024-11-11 16:40:59

Judging History

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

  • [2024-11-11 16:40:59]
  • 评测
  • [2024-11-11 16:40:59]
  • 提交

answer

#include<bits/stdc++.h>
#include<numeric>
using namespace std;
typedef long long ll;
#define pii pair<int,int>
#define fs first
#define sc second
#define pb push_back
#define epb emplace_back
#define endl
#define SZ(X) (int)((X).size())
template<typename T>T mabs(T x){return x>=0?x:-x;}
const int N=1.1e6,mod=998244353;
int a[N],n;
struct trar{
	ll tree[N];
	#define lb(i) ((i)&-(i))
	void _add(int i,ll x){
		for(;i<=n;i+=lb(i))tree[i]+=x;
	}
	ll _sum(int r){
		assert(r>0);
		ll res=0;
		for(;r>0;r^=lb(r))res+=tree[r];
		return res;
	}
	ll query(int i){
		return _sum(i);
	}
	void modify(int l,int r,ll x){
		assert(l<=r);
		ll adt=x;//-query(l);
		_add(l,adt);
		_add(r+1,-adt);
	}
}L,R;
int ss[N];
void work(){
	int q;
	scanf("%d%d",&n,&q);
	for(int i=1;i<=n;i++)scanf("%d",a+i);
	int sq=sqrt(n+1);
	map<int,int>bl;
	auto era=[&](int x){
		//cerr<<"ERA"<<x<<"#\n";
		assert(bl[x]>0);
		if(bl[x]>1)bl[x]--;
		else if(bl[x]==1)bl.erase(x);
	};
	auto getans=[&](){
		if(bl.size()<=sq){
			if(bl.size()==0)return n;
			int res=bl.begin()->fs;
			for(auto e:bl)res=gcd(res,e.fs);
			return ss[res];
		}
		else return 1;
	};
	
	int las=1;
	for(int i=2;i<=n+1;i++){
		if(a[i]<a[i-1]){
			int l=las,r=i-1;
			L.modify(l,r,l);
			R.modify(l,r,r);
			if(r<n)bl[r-l+1]++;
			las=i;
		}
	}
	cout<<getans()<<"\n";
	
	for(int i=1;i<=n;i++)
		cerr<<'('<<L.query(i)<<','<<R.query(i)<<")";cerr<<"\n";
	for(auto e:bl)
		cerr<<'('<<e.fs<<','<<e.sc<<")";cerr<<"\n";

	
	a[0]=2e9+1;
	for(int j=1;j<=q;j++){
		int i,x;
		scanf("%d%d",&i,&x);
		set<pii>tmp;
		for(int k=max(i-1,1);k<=min(i+1,n);k++)
			tmp.insert(pii(L.query(k),R.query(k)));
		for(auto e:tmp){
			if(e.sc<n)era(e.sc-e.fs+1);
		}
		//cerr<<"$";
		
		a[i]=x;
		vector<pii>temp;
		auto update=[&](int l,int r){
			//cerr<<"up#"<<l<<" "<<r<<"\n";//
			temp.pb(pii(l,r));
		};
		int l,r;
		if(a[i-1]<=x&&x<=a[i+1]){
			l=L.query(i-1),r=R.query(i+1);
			update(l,r);
		}
		else if(a[i-1]<=x){
			l=L.query(i-1),r=i;
			update(l,r);
			if(i<n){
				l=i+1,r=R.query(i+1);
				update(l,r);
			}
		}
		else if(x<=a[i+1]){
			l=i,r=R.query(i+1);
			update(l,r);
			if(i>1){
				l=L.query(i-1),r=i-1;
				update(l,r);
			}
		}
		else{
			if(i<n){
				l=i+1,r=R.query(i+1);
				update(l,r);
			}
			if(i>1){
				l=L.query(i-1),r=i-1;
				update(l,r);
			}
			update(i,i);
		}
		for(auto e:tmp)
			L.modify(e.fs,e.sc,-e.fs),R.modify(e.fs,e.sc,-e.sc);
		
		for(int i=1;i<=n;i++)
			cerr<<'('<<L.query(i)<<",_"<<R.query(i)<<")";cerr<<"\n";
		
		
		for(auto e:temp){
			l=e.fs,r=e.sc;
			L.modify(l,r,l),R.modify(l,r,r);
			if(r<n)bl[r-l+1]++;
		}
			
		cout<<getans()<<"\n";
		
		////
		for(int i=1;i<=n;i++)
			cerr<<'('<<L.query(i)<<','<<R.query(i)<<")";cerr<<"\n";
		for(auto e:bl)
			cerr<<'('<<e.fs<<';'<<e.sc<<")";cerr<<"\n";
	}
}
int main(){
	for(int i=1;i<=2e5;i++){
		for(int j=1;j*j<=i;j++){
			if(i%j==0)ss[i]+=1+(j!=i/j);
		}
	}
	int t;
	scanf("%d",&t);
	while(t--)work();
	return 0;
}

详细

answer.code: In lambda function:
answer.code:54:43: error: ‘gcd’ was not declared in this scope
   54 |                         for(auto e:bl)res=gcd(res,e.fs);
      |                                           ^~~
answer.code: In function ‘void work()’:
answer.code:40:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   40 |         scanf("%d%d",&n,&q);
      |         ~~~~~^~~~~~~~~~~~~~
answer.code:41:35: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   41 |         for(int i=1;i<=n;i++)scanf("%d",a+i);
      |                              ~~~~~^~~~~~~~~~
answer.code:81:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   81 |                 scanf("%d%d",&i,&x);
      |                 ~~~~~^~~~~~~~~~~~~~
answer.code: In function ‘int main()’:
answer.code:157:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  157 |         scanf("%d",&t);
      |         ~~~~~^~~~~~~~~