粉福

粉福

  • \(45\) :你们说题我来爆。(仅限3题,而且得我A过)

P7078

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<fstream>
#include<cmath>
#include<unistd.h>
using namespace std;
#define pii pair<int,int>
#define mp(x,y) make_pair(x,y)
inline int read(){
   char ch=getchar();
   int res=0,f=1;
   for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
   for(;ch>='0'&&ch<='9';ch=getchar())res=(res<<3)+(res<<1)+(ch-'0');
   return res*f;
}
const int MAXN=1e6+5,inf=1e9;
int t,n,a[MAXN];
pii q1[MAXN],q2[MAXN];
int l1,r1,l2,r2;
inline pii mx(){
   if(r1==l1)return q2[l2++];
   else if(r2==l2)return q1[--r1];
   else if(q2[l2]>q1[r1-1])return q2[l2++];
   else return q1[--r1];
}
inline pii mn(){
   if(l1==r1)return q2[--r2];
   else if(r2==l2)return q1[l1++];
   else if(q2[r2-1]<q1[l1])return q2[--r2];
   else return q1[l1++];
}
inline pii M_min(pii x,pii y){
   return x<y?x:y;
}
inline void solve(){
   l1=r1=l2=r2=0;
   for(int i=1;i<=n;++i)q1[r1++]=mp(a[i],i);
   int fl=0,cnt=0,alf=0;
   while(1){

   	++cnt;
   	pii x=mn(),y=mx();
   	pii z=M_min((l1<r1?q1[l1]:mp(inf,-inf)),(l2<r2?q2[r2-1]:mp(inf,-inf)));
   	y.first-=x.first;
   	if(y>z||cnt==n-1){
   		if(fl){
   			printf("%d\n",n-(fl-(alf&1)));
   			return ;
   		}
   		if(cnt==n-1){
   			printf("1\n");
   			return ;
   		}
   		q2[r2++]=y;
   	}
   	else {
   		alf++;
   		if(!fl)fl=cnt;	
   		q2[r2++]=y;
   	}
   }
}
int main(){
   t=read()-1;
   n=read();
   for(int i=1;i<=n;++i)a[i]=read();
   solve();
   while(t--){
   	int k=read();
   	for(int i=1,x;i<=k;++i)x=read(),a[x]=read();
   	solve();
   }
   return 0;
}//这是被JC的
  • \(70\)爆字迹

  • \(110\) :爆大号。
    猜忌一个 @maple_leaf

  • \(150\) :爆ip:湖南省 长沙市 岳麓区 坡西路 408号(家住哪就不爆了,面积可私,不过大概率没时间。。。)

  • \(160\)无限 Q&A

  • \(170\)爆手

  • \(250\) :爆声。

posted @ 2025-02-08 15:32  BriskCube  阅读(42)  评论(0)    收藏  举报