<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      The 2025 ICPC China Zhejiang Province Programming Contest

      題解:

      https://files.cnblogs.com/files/clrs97/ZJCPC_2025.pdf

       

      Code:

      A. Outer LIS

      #include<iostream>
      #include<cmath>
      #include<algorithm>
      using namespace std;
      const int N=100005,K=321;
      int n,q,m,lim,i,j,k,l,r,a[N],b[N];
      int mx,f[N],g[N],pre1[N],suf1[N],bit[N],pre2[K][N],suf2[K][N],tmp[N],ans[K][K];
      int at[N],st[K],en[K],pool[N];
      inline void up(int&a,int b){a<b?(a=b):0;}
      inline void ins(int x,int p){for(;x<=n;x+=x&-x)up(bit[x],p);}
      inline int ask(int x){int t=0;for(;x;x-=x&-x)up(t,bit[x]);return t;}
      inline bool cmp(int x,int y){return a[x]<a[y];}
      inline int query(int l,int r){
        l--,r++;
        if(l<1)return suf1[r];
        if(r>n)return pre1[l];
        int L=at[l],R=at[r];
        int ret=max(ans[L-1][R+1],max(suf1[r],pre1[l]));
        for(int i=st[L];i<=l;i++)up(ret,f[i]+suf2[R+1][a[i]]);
        for(int i=en[R];i>=r;i--)up(ret,g[i]+pre2[L-1][a[i]]);
        int tmp=0;
        for(int i=st[R],ir=en[R],j=st[L],jr=en[L];i<=ir;i++){
          int x=pool[i];
          if(x<r)continue;
          while(j<=jr){
            int y=pool[j];
            if(a[y]>a[x])break;
            if(y<=l)up(tmp,f[y]);
            j++;
          }
          up(ret,tmp+g[x]);
        }
        return ret;
      }
      int main(){
        ios_base::sync_with_stdio(0);cin.tie(0);
        cin>>n>>q;
        for(i=1;i<=n;i++)cin>>a[i]>>b[i];
        
        for(i=1;i<=n;i++){
          f[i]=ask(a[i])+b[i];
          ins(a[i],f[i]);
          pre1[i]=max(pre1[i-1],f[i]);
        }
        for(i=1;i<=n;i++)bit[i]=0;
        for(i=n;i;i--){
          g[i]=ask(n-a[i]+1)+b[i];
          ins(n-a[i]+1,g[i]);
          suf1[i]=max(suf1[i+1],g[i]);
        }
        
        lim=sqrt(n);
        for(i=1;i<=n;i++)at[i]=(i-1)/lim+1;
        m=at[n];
        for(i=1;i<=n;i++)en[at[i]]=i;
        for(i=n;i;i--)st[at[i]]=i;
        
        for(i=1;i<=m;i++){
          for(j=st[i];j<=en[i];j++)up(tmp[a[j]],f[j]);
          mx=0;
          for(j=1;j<=n;j++){
            up(mx,tmp[j]);
            pre2[i][j]=mx;
          }
        }
        for(i=1;i<=n;i++)tmp[i]=0;
        for(i=m;i;i--){
          for(j=st[i];j<=en[i];j++)up(tmp[a[j]],g[j]);
          mx=0;
          for(j=n;j;j--){
            up(mx,tmp[j]);
            suf2[i][j]=mx;
          }
        }
        
        for(i=1;i<=n;i++)pool[i]=i;
        for(i=1;i<=m;i++){
          l=st[i],r=en[i];
          sort(pool+l,pool+r+1,cmp);
          for(j=i+2;j<=m;j++){
            mx=ans[i-1][j];
            for(k=l;k<=r;k++)up(mx,f[k]+suf2[j][a[k]]);
            ans[i][j]=mx;
          }
        }
        
        while(q--){
          cin>>l>>r;
          cout<<query(l,r)<<"\n";
        }
      }
      

        

      B. Turn on the Light 3

      #include<bits/stdc++.h>
      using namespace std;
       
      const int N=2e5+1e3+7;
       
      int T,n,m,vis[N];
       
      int main()
      {
          ios::sync_with_stdio(false);
          cin.tie(0);
          cin>>T;
          while(T--)
          {
              cin>>n>>m;
              fill(vis+1,vis+n+1,0);
              for(int i=1;i<=m;i++)
              {
                  int x;
                  cin>>x;
                  if(vis[x])
                      cout<<"the lights are already on!\n";
                  else
                  {
                      int cnt=0;
                      for(int j=x;j<=n;j+=x)
                          cnt+=1-vis[j],vis[j]=1;
                      cout<<cnt<<"\n";
                  }
              }
          }
      }
      

        

      C. RDDCCD

      #include<bits/stdc++.h>
      using namespace std;
      int main()
      {
      	ios_base::sync_with_stdio(false);
      	cin.tie(0);
      	static int n,q;
      	cin>>n>>q;
      	auto rev=[&](int x)->int
      	{
      		int ans=0;
      		while(x>0)
      		{
      			ans=ans*10+x%10;
      			x/=10;
      		}
      		return ans;
      	};
      	vector<int> pd,good,contr;
      	vector<vector<int>> a(n+5,vector<int>(n+5)),ra(n+5,vector<int>(n+5));
      	for(int i=1;i<=n;i++)
      	{
      		for(int j=1;j<=n;j++)
      		{
      			cin>>a[i][j];
      			ra[i][j]=rev(a[i][j]);
      			int x=a[i][j],rx=ra[i][j];
      			if(i==1 and j==1)
      			{
      				for(int k=2;k*k<=x;k++)
      				{
      					if(x%k==0)
      					{
      						int now=k;
      						while(x%now==0)
      							pd.push_back(now),now*=k;
      						now/=k;
      						x/=now;
      					}
      				}
      				if(x!=1)
      					pd.push_back(x);
      				for(int k=2;k*k<=rx;k++)
      				{
      					if(rx%k==0)
      					{
      						int now=k;
      						while(rx%now==0)
      							pd.push_back(now),now*=k;
      						now/=k;
      						rx/=now;
      					}
      				}
      				if(rx!=1)
      					pd.push_back(rx);
      				sort(pd.begin(),pd.end());
      				pd.erase(unique(pd.begin(),pd.end()),pd.end());
      				good.resize(pd.size());
      			}
      			else
      			{
      				for(int k=0;k<(int)pd.size();k++)
      				{
      					if(x%pd[k]==0 or rx%pd[k]==0)
      					{
      						good[k]++;
      					}
      				}
      			}
      		}
      	}
      	{
      		auto tmp=pd;pd.clear();
      		for(int i=0;i<(int)tmp.size();i++)
      		{
      			if(good[i]==n*n-1)
      				pd.push_back(tmp[i]);
      		}
      		contr.resize(pd.size());
      		for(int i=0;i<(int)pd.size();i++)
      		{
      			contr[i]=pd[i];
      			for(auto p:pd)
      			{
      				if(pd[i]!=p and pd[i]%p==0)
      				{
      					contr[i]=min(contr[i],pd[i]/p);
      				}
      			}
      		}
      	}
       
      	static int N=n*4;
      	struct DS
      	{
      		vector<int> pa,del,sz,cnt,cur;
      		int acnt,tot;
      		DS()
      		{
      			pa.resize(N+5);
      			del.resize(N+5);
      			sz.resize(N+5,1);
      			cnt.resize(N+5); // cnt of (cur==del)
      			cur.resize(N+5);
      			acnt=tot=0;
      		}
      		pair<int,int> find(int x)
      		{
      			if(pa[x]==0)
      				return {x,0};
      			auto [y,d]=find(pa[x]);
      			del[x]^=d;
      			pa[x]=y;
      			return {y,del[x]};
      		}
      		bool unite(int x,int y,int d)
      		{
      			auto [px,dx]=find(x);
      			auto [py,dy]=find(y);
      			if(px==py)
      			{
      				return (d^dx^dy)==0;
      			}
      			if(sz[px]<sz[py])
      				swap(px,py),swap(dx,dy);
      			del[py]=dx^dy^d;
      			sz[px]+=sz[py];
      			pa[py]=px;
      			return true;
      		}
      		bool addedge(int x,int y,int d)
      		{
      			int u=x+y,v=x-y+n*3;
      			return unite(u,v,d);
      		}
      		void prep()
      		{
      			for(int i=1;i<=N;i++)
      			{
      				auto [x,d]=find(i);
      				if(d==0)
      				{
      					cnt[x]++;
      				}
      			}
      			for(int i=1;i<=N;i++)
      			{
      				if(find(i).first==i)
      				{
      					tot++;
      					if(cnt[i]==sz[i] or cnt[i]==0)
      						acnt++;
      				}
      			}
      		}
      		void change(int ty,int k) // ty=0: +, ty=1: -
      		{
      			int u=ty?k+n*3:k;
      			auto [pu,d]=find(u);
      			if(cur[u]==d)
      			{
      				if(cnt[pu]==sz[pu])
      				{
      					acnt--;
      				}
      				cnt[pu]--;
      				if(cnt[pu]==0)
      				{
      					acnt++;
      				}
      			}
      			else
      			{
      				if(cnt[pu]==0)
      				{
      					acnt--;
      				}
      				cnt[pu]++;
      				if(cnt[pu]==sz[pu])
      				{
      					acnt++;
      				}
      			}
      			cur[u]^=1;
      		}
      	};
      	vector<DS> info(pd.size());
      	for(int t=0;t<(int)pd.size();t++)
      	{
      		int p=pd[t],flag=1;
      		for(int i=1;i<=n;i++)
      		{
      			for(int j=1;j<=n;j++)
      			{
      				if(a[i][j]%p==0 and ra[i][j]%p==0)
      				{
      					//do nothing
      				}
      				else if(a[i][j]%p==0)
      				{
      					flag&=info[t].addedge(i,j,0);
      				}
      				else
      				{
      					flag&=info[t].addedge(i,j,1);
      				}
      			}
      		}
      		info[t].prep();
      		if(flag==0)info[t].tot=-1;
      	}
       
      	while(q--)
      	{
      		char op;
      		int k,ans=1;
      		cin>>op>>k;
      		for(int t=0;t<(int)pd.size();t++)
      		{
      			if(op=='+')
      				info[t].change(0,k);
      			else
      				info[t].change(1,k);
      			if(info[t].acnt==info[t].tot)
      				ans*=contr[t];
      		}
      		cout<<ans<<"\n";
      	}
       
      	return 0;
      }
      

        

      D. Too Clever by Half

      #include<bits/stdc++.h>
      using namespace std;
       
      #define int long long
       
      const int N=1e6+1e3+7,P=1e9+7;
       
      int T,n,c[N],s[N];
       
      signed main()
      {
          ios::sync_with_stdio(false);
          cin.tie(0);
          cin>>T;
          while(T--)
          {
              cin>>n;
              for(int i=0;i<=n;i++)
                  cin>>c[i];
              c[0]++;
              s[n+1]=0;
              for(int i=n;i>=0;i--)
                  s[i]=c[i]-s[i+1];
              int ok=1;
              if(s[0]!=1)
                  ok=0;
              for(int i=1;i<=n;i++)
                  if(s[i]<=0)
                      ok=0;
              if(!ok)
              {
                  cout<<"Impossible\n";
                  continue;
              }
              string ans;
              for(int i=1;i<=n;i++)
              {
                  for(int j=1;j<=(s[i]-1);j++)
                      ans+='R',ans+='L';
                  ans+='R';
              }
              for(int i=1;i<=n;i++)
                  ans+='L';
              cout<<ans<<"\n";
          }
      }
      

        

      E. Gold Miner

      #include<bits/stdc++.h>
      using namespace std;
       
      #define int long long
       
      const int N=5e5+1e3+7,M=1e9+7;
       
      int qpow(int a,int b)
      {
          int ret=1;
          while(b)
          {
              if(b&1)
                  ret=ret*a%M;
              b>>=1;
              a=a*a%M;
          }
          return ret;
      }
       
      using ll=__int128;
       
      struct P {
          int x,y;
      }p[N];
       
      int operator ^(const P &a,const P &b)
      {
          return a.x*b.x+a.y*b.y;
      }
       
      int a[N],b[N],k[N];
       
      int n,q;
       
      struct Event {
          int p,q,a,b;
      };
       
      bool operator <(const Event &a,const Event &b)
      {
          return (ll)a.p*b.q<(ll)b.p*a.q;
      }
       
      bool operator ==(const Event &a,const Event &b)
      {
          return (ll)a.p*b.q==(ll)b.p*a.q;
      }
       
      pair<int,int> gete(P a,P b)
      {
          if(a.x>b.x)
              swap(a,b);
          return {(b^b)-(a^a),2*(b.x-a.x)};
      }
       
      struct Func {
          int a,b,c,d;
          int eval(int u){return (((a*u+b)%M*u+c)%M*u+d)%M;}
      };
       
      Func operator +(const Func &a,const Func &b)
      {
          return {(a.a+b.a)%M,(a.b+b.b)%M,(a.c+b.c)%M,(a.d+b.d)%M};
      }
       
      Func f[N],s[N],d[N],sd[N];
       
      int dlt[N];
       
      int rk[N],ans[N];
       
      signed main()
      {
          ios::sync_with_stdio(false);
          cin.tie(0);
          cin>>n>>q;
          for(int i=1;i<=n;i++)
              cin>>p[i].x>>p[i].y;
          for(int i=1;i<=q;i++)
              cin>>a[i]>>b[i]>>k[i];
          sort(p+1,p+n+1,[&](const auto &a,const auto &b){
              return a.x<b.x||(a.x==b.x&&a.y>b.y);
          });
          vector<Event> ev;
          for(int i=1;i<=n;i++)
              for(int j=i+1;j<=n;j++)
              {
                  if(p[i].x==p[j].x)
                      continue;
                  auto [ax,bx]=gete(p[i],p[j]);
                  ev.push_back({ax,bx,i,j});
              }
          vector<Event> qr;
          for(int i=1;i<=q;i++)
          {
              if(a[i]!=b[i])
              {
                  qr.push_back({a[i],1,i,-1});
                  qr.push_back({b[i],1,i,1});
              }
              else
                  qr.push_back({a[i],1,i,0});
          }
          sort(ev.begin(),ev.end());
          sort(qr.begin(),qr.end());
          reverse(qr.begin(),qr.end());
          for(int i=1;i<=n;i++)
          {
              d[i]={0,1,(2*M-2*p[i].x)%M,(p[i]^p[i])%M};
              f[i]={qpow(3,M-2),(M-p[i].x)%M,(p[i]^p[i])%M,0};
              s[i]=s[i-1]+f[i];
              sd[i]=sd[i-1]+d[i];
              rk[i]=i;
          }
          vector<int> pos;
          vector<int> vis(n+1,-1);
          for(int i=0,j;i<ev.size();i=j+1)
          {
              while(qr.size())
              {
                  auto [p,q,x,t]=qr.back();
                  if((ll)p*ev[i].q>=ev[i].p)
                      break;
                  qr.pop_back();
                  if(!t)
                      ans[x]=sd[k[x]].eval(p);
                  else
                      ans[x]=(ans[x]+s[k[x]].eval(p)*(M+t))%M;
              }
              int X=(ev[i].p%M+M)%M*qpow(ev[i].q,M-2)%M;
              j=i;
              while(j+1<ev.size()&&ev[i]==ev[j+1])
                  j++;
              pos.clear();
              for(int k=i;k<=j;k++)
              {
                  if(vis[ev[k].a]!=i)
                      vis[ev[k].a]=i,pos.push_back(ev[k].a);
                  if(vis[ev[k].b]!=i)
                      vis[ev[k].b]=i,pos.push_back(ev[k].b);
              }
              sort(pos.begin(),pos.end(),[&](const auto &a,const auto &b){
                  return rk[a]<rk[b];
              });
              for(int u=0,v;u<pos.size();u=v+1)
              {
                  v=u;
                  int A=rk[pos[u]];
                  while(v+1<pos.size())
                  {
                      int B=rk[pos[v+1]];
                      if(p[A].x==p[B].x&&p[A].y==p[B].y)
                      {
                          v++;
                          continue;
                      }
                      if(p[A].x==p[B].x)
                          break;
                      auto [a,b]=gete(p[A],p[B]);
                      if((ll)a*ev[i].q!=(ll)b*ev[i].p)
                          break;
                      v++;
                  }
                  int B=rk[pos[v]];
                  for(int z=A;z<=B;z++)
                      dlt[z]=(f[z].eval(X)-f[A+B-z].eval(X)+M)%M;
                  for(int z=u;z<=v;z++)
                      rk[pos[z]]=A+B-rk[pos[z]];
                  reverse(p+A,p+B+1);
                  reverse(f+A,f+B+1);
                  reverse(d+A,d+B+1);
                  for(int z=A;z<=B;z++)
                  {
                      f[z].d=(f[z].d+dlt[z])%M;
                      s[z]=s[z-1]+f[z];
                      sd[z]=sd[z-1]+d[z];
                  }
              }
          }
          while(qr.size())
          {
              auto [p,q,x,t]=qr.back();
              qr.pop_back();
              if(!t)
                  ans[x]=sd[k[x]].eval(p);
              else
                  ans[x]=(ans[x]+s[k[x]].eval(p)*(M+t))%M;
          }
          for(int i=1;i<=q;i++)
          {
              if(a[i]==b[i])
                  cout<<ans[i]<<"\n";
              else
                  cout<<ans[i]*qpow(b[i]-a[i],M-2)%M<<"\n";
          }
      }
      

        

      F. Challenge NPC III

      #include<bits/stdc++.h>
      using namespace std;
      const int maxc=50,inf=0x3f3f3f3f;
      int main()
      {
      	ios_base::sync_with_stdio(false);
      	cin.tie(0);
      	int T;
      	cin>>T;
      	while(T--)
      	{
      		int n,m,k;
      		cin>>n>>m>>k;
      		vector<int> c(n+5);
      		for(int i=1;i<=n;i++)
      		{
      			cin>>c[i];
      		}
      		vector<vector<int>> G(n+5);
      		for(int i=1;i<=m;i++)
      		{
      			int u,v;
      			cin>>u>>v;
      			G[u].push_back(v);
      		}
      		int ok=1;
      		for(int cc=1;cc<=maxc;cc++)
      		{
      			vector<int> dis(n+5,inf),start(n+5),dis2(n+5,inf);
      			queue<pair<int,int>> q;
      			for(int i=1;i<=n;i++)
      			{
      				if(c[i]==cc)
      				{
      					start[i]=i;
      					dis[i]=0;
      					q.emplace(i,0);
      				}
      			}
      			while(not q.empty())
      			{
      				auto [u,ty]=q.front();q.pop();
      				if(dis[u]>=k-1)break;
      				if(ty==0)
      				{
      					for(auto v:G[u])
      					{
      						if(dis[v]>dis[u]+1)
      						{
      							dis[v]=dis[u]+1;
      							start[v]=start[u];
      							q.emplace(v,0);
      						}
      						if(dis2[v]>dis[u]+1 and start[v]!=start[u])
      						{
      							dis2[v]=dis[u]+1;
      							q.emplace(v,1);
      						}
      					}
      				}
      				else
      				{
      					for(auto v:G[u])
      					{
      						if(dis2[v]>dis2[u]+1)
      						{
      							dis2[v]=dis2[u]+1;
      							q.emplace(v,1);
      						}
      					}
      				}
      			}
      			for(int i=1;i<=n;i++)
      			{
      				if(c[i]==cc and dis2[i]<=k-1)
      				{
      					ok=0;
      					break;
      				}
      			}
      		}
      		if(ok)cout<<"YES\n";
      		else cout<<"NO\n";
      	}
      	return 0;
      }
      

        

      G. Tariff-ied

      /*
      x>=0
       
      1+a(x+1)/100
      =(100+ax+a)/100
       
      (100+ax+a)/(100+ax)
      =1+a/(100+ax)
      */
      #include<iostream>
      using namespace std;
      typedef long long ll;
      const int N=45,M=10005;
      int Case,n,k,i,a[N],f[N],g[N],len,dot,num[M];ll U,D;
      inline int check(ll u,ll d){
        ll low=0,high=0;
        for(int i=0;i<n;i++){
          //a/(100+ax)>=u/d
          //a*d>=u*(100+ax)
          //a*d/u>=100+ax
          //ax<=a*d/u-100
          //x<=d/u-100/a
          //x<=(d*a-100*u)/(u*a)
          ll A=d*a[i]-100*u,B=u*a[i];
          if(A<0)continue;
          if(A%B==0)low--;
          high+=A/B+1;
        }
        low+=high;
        if(low>k)return 1;
        if(high<k)return -1;
        return 0;
      }
      inline void solve(){
        if(check(1,1)==0){
          U=D=1;
          return;
        }
        ll lu=0,ld=1,ru=1,rd=1,mu,md;
        while(1){
          mu=lu+ru;
          md=ld+rd;
          int ret=check(mu,md);
          if(ret==0){
            U=mu,D=md;
            break;
          }
          ll l=1,r,fin,mid;
          if(ret>0){//turn right
            while(1){
              r=l<<1;
              if(check(lu+ru*r,ld+rd*r)>0)l=r;else break;
            }
            fin=l++;r--;
            while(l<=r){
              ll mid=(l+r)>>1;
              if(check(lu+ru*mid,ld+rd*mid)>0)l=(fin=mid)+1;else r=mid-1;
            }
            lu+=ru*fin,ld+=rd*fin;
          }else{//turn left
            while(1){
              r=l<<1;
              if(check(ru+lu*r,rd+ld*r)<0)l=r;else break;
            }
            fin=l++;r--;
            while(l<=r){
              ll mid=(l+r)>>1;
              if(check(ru+lu*mid,rd+ld*mid)<0)l=(fin=mid)+1;else r=mid-1;
            }
            ru+=lu*fin,rd+=ld*fin;
          }
        }
      }
      inline void mul(int p){
        for(int i=1;i<=len;i++)num[i]*=p;
        for(int i=1;i<=len;i++)if(num[i]>=10){
          if(i==len)num[++len]=0;
          num[i+1]+=num[i]/10;
          num[i]%=10;
        }
      }
      void show(){
        int i;
        for(i=len;i>dot;i--)cout<<num[i];
        cout<<".";
        for(;i;i--)cout<<num[i];
        cout<<"\n";
      }
      int main(){
        ios_base::sync_with_stdio(0);cin.tie(0);
        cin>>Case;
        while(Case--){
          cin>>n>>k;
          for(i=0;i<n;i++)cin>>a[i];
          solve();
          for(i=0;i<n;i++){
            ll A=D*a[i]-100*U,B=U*a[i];
            if(A<0){
              f[i]=g[i]=0;
              continue;
            }
            f[i]=A/B+1;
            if(A%B==0)f[i]--,g[i]=1;else g[i]=0;
            k-=f[i];
          }
          for(i=0;i<n&&k;i++)if(g[i])f[i]++,k--;
          len=1;
          num[1]=1;
          dot=0;
          for(i=0;i<n;i++){
            if(!f[i])continue;
            mul(f[i]*a[i]+100);
            dot+=2;
          }
          show();
        }
      }
      

        

      H. Sweet Sugar IV

      #include<iostream>
      #include<algorithm>
      #include<map>
      using namespace std;
      typedef long long ll;
      const int N=1000005,M=200005,Q=300005,K=5;
      map<int,ll>T[K];ll bit[K][M];
      int n,m,lim,cob,cd,cq,i,j,x,y,z,ord[M],g[M],nxt[Q];ll ans[Q];
      int id[N],dfn,dfn1[N],dfn2[N];bool vis[N];
      struct P{int x,y,z;}d[M],q[Q];
      inline int getid(int x,int y){return (x-1)*m+y;}
      void dfs1(int u){
        if(vis[u]||id[u]<0)return;
        vis[u]=1;
        if(u<=lim)dfs1(u+m);
        if(u%m)dfs1(u+1);
        if(id[u]>0){
          dfn++;
          ord[dfn]=id[u];
        }
        dfn1[u]=dfn;
      }
      void dfs2(int u){
        if(!vis[u]||id[u]<0)return;
        vis[u]=0;
        if(u%m)dfs2(u+1);
        if(u<=lim)dfs2(u+m);
        if(id[u]>0)dfn++;
        dfn2[u]=dfn;
      }
      inline void modify(ll*f,int x,ll p){for(;x<=cd;x+=x&-x)f[x]+=p;}
      inline ll ask(ll*f,int x){ll t=0;for(;x;x-=x&-x)t+=f[x];return t;}
      void insert(int o,int x,ll p){
        if(o>=K)return;
        T[o][x]+=p;
        modify(bit[o],x,p);
        while(p){
          map<int,ll>::iterator it=T[o].lower_bound(x+1);
          if(it==T[o].end())return;
          ll t=min(p,it->second);
          p-=t;
          insert(o+1,it->first,t);
          modify(bit[o],it->first,-t);
          if(t==it->second)T[o].erase(it);else it->second-=t;
        }
      }
      inline ll query(int x,int k){
        ll ret=0;
        for(int i=0;i<k;i++)ret+=ask(bit[i],x);
        return ret;
      }
      int main(){
        ios_base::sync_with_stdio(0);cin.tie(0);
        cin>>n>>m>>cob>>cd>>cq;
        while(cob--){
          int x1,y1,x2,y2;
          cin>>x1>>y1>>x2>>y2;
          z=getid(x1,y1);
          for(i=x1;i<=x2;i++){
            int k=z;
            for(j=y1;j<=y2;j++,k++)id[k]=-1;
            z+=m;
          }
        }
        for(i=1;i<=cd;i++){
          cin>>x>>y>>z;
          d[i].x=x;
          d[i].y=y;
          d[i].z=z;
          id[getid(x,y)]=i;
        }
        lim=(n-1)*m;
        dfs1(1);
        dfn=0;
        dfs2(1);
        for(i=1;i<=cq;i++){
          cin>>x>>y>>z;
          j=getid(x,y);
          x=dfn1[j];
          y=dfn2[j];
          nxt[i]=g[x];
          g[x]=i;
          q[i].y=y;
          q[i].z=z;
        }
        for(i=1;i<=cd;i++){
          j=ord[i];
          insert(0,dfn2[getid(d[j].x,d[j].y)],d[j].z);
          for(j=g[i];j;j=nxt[j])ans[j]=query(q[j].y,q[j].z);
        }
        for(i=1;i<=cq;i++)cout<<ans[i]<<"\n";
      }
      

        

      I. Version Number

      #include<bits/stdc++.h>
      #define ll long long
      using namespace std;
       
      vector<int>getnum(string A)
      {
      	vector<int>ret;
      	int x=0;
      	for(auto cc:A)
      	{
      		if(cc=='.') ret.push_back(x),x=0;
      		else x=x*10+(cc-'0');
      	}
      	ret.push_back(x);
      	return ret;
      }
       
      int main()
      {
      	ios_base::sync_with_stdio(false);
      	
      	int Tcase; cin>>Tcase;
      	while(Tcase--)
      	{
      		string A,B;
      		cin>>A>>B;
      		auto ai=getnum(A);
      		auto bi=getnum(B);
      		int ok=1;
      		for(int i=0;i<(int)ai.size();i++)
      		{
      			if( ai[i]!=bi[i] )
      			{
      				if(ai[i]<bi[i]) cout<<"B\n";
      				else cout<<"A\n";
      				ok=0;
      				break;
      			}
      		}
      		if(ok) cout<<"Equal\n";
      	}
      	
      	return 0;
      }
      

        

      J. Chocolate Sweet

      #include<bits/stdc++.h>
      using namespace std;
       
      #define int long long
       
      using pii=pair<int,int>;
       
      const int N=1e6+1e3+7;
       
      int T,n,m,q;
       
      signed main()
      {
          ios::sync_with_stdio(false);
          cin.tie(0);
          cin>>T;
          while(T--)
          {
              cin>>n>>m>>q;
              vector<vector<int>> a(n+1,vector<int>(m+1));
              vector<vector<int>> s(n+1,vector<int>(m+1));
              for(int i=1;i<=n;i++)
                  for(int j=1;j<=m;j++)
                  {
                      cin>>a[i][j];
                      s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];
                  }
              vector<pii> qry;
              vector<int> ans(q);
              for(int i=0;i<q;i++)
              {
                  int x;
                  cin>>x;
                  qry.push_back({x,i});
              }
              sort(qry.begin(),qry.end());
              priority_queue<pii> dlt;
              multiset<int> ms;
              for(int j=1;j<m;j++)
                  ms.insert(n-j);
              vector<int> c(m+1);
              for(int j=1;j<=m;j++)
                  dlt.push({-s[1][j],j});
              int st=0;
              for(auto [qs,id]:qry)
              {
                  while(dlt.size()&&-dlt.top().first<=qs)
                  {
                      auto [e,j]=dlt.top();
                      dlt.pop();
                      if(j<m)
                          ms.erase(ms.find(n-c[j]-j));
                      c[j]++;
                      if(j<m&&c[j]<n)
                          ms.insert(n-c[j]-j);
                      if(c[j]<n)
                          dlt.push({-s[c[j]+1][j],j});
                      else
                          st=max(st,j);
                  }
                  if(n-c[m]-m+st==0&&(!ms.size()||*ms.begin()+st>0))
                      ans[id]=1;
              }
              for(int i=0;i<q;i++)
                  cout<<(ans[i]?"Putata":"Budada")<<"\n";
          }
      }
      /*
      2
      3 3 2
      1 2 1
      1 1 3
      1 4 2
      1
      5
      2 2 1
      1000000000 1000000000
      1000000000 1000000000
      0
      */
      

        

      K. Wavelike Finding

      #include<iostream>
      #include<algorithm>
      using namespace std;
      typedef long long ll;
      const ll inf=1LL<<60;
      const int N=200010;
      int n,m,i,a[N],cut,last;ll lim,f[N];
      struct DS{
        int cnt,len,root,f[N],son[N][2],size[N];
        ll v[N],tag[N],sum;
        void tag1(int x,ll p){
          if(!x)return;
          v[x]-=p;
          tag[x]+=p;
        }
        void pb(int x){
          if(!tag[x])return;
          tag1(son[x][0],tag[x]);
          tag1(son[x][1],tag[x]);
          tag[x]=0;
        }
        void up(int x){size[x]=size[son[x][0]]+size[son[x][1]]+1;}
        void rotate(int x){
          int y=f[x],w=son[y][1]==x;
          son[y][w]=son[x][w^1];
          if(son[x][w^1])f[son[x][w^1]]=y;
          if(f[y]){
            int z=f[y];
            if(son[z][0]==y)son[z][0]=x;
            if(son[z][1]==y)son[z][1]=x;
          }
          f[x]=f[y];son[x][w^1]=y;f[y]=x;up(y);
        }
        void splay(int x){
          while(f[x]){
            int y=f[x];
            if(f[y]){if((son[f[y]][0]==y)^(son[y][0]==x))rotate(x);else rotate(y);}
            rotate(x);
          }
          up(x);
          root=x;
        }
        void init(){cnt=len=sum=0;}
        void append(int val){
          if(!cnt){
            cnt=len=root=1;
            f[1]=son[1][0]=son[1][1]=0;
            size[1]=1;
            sum=v[1]=1LL*m*val;
            tag[1]=0;
            return;
          }
          int x=root,w=m;
          while(1){
            size[x]++;
            pb(x);
            int t=1LL*(w-size[son[x][0]])*val>v[x]?0:1;
            if(!son[x][t]){
              son[x][t]=++cnt;
              f[cnt]=x;
              son[cnt][0]=son[cnt][1]=0;
              size[cnt]=1;
              splay(cnt);
              v[cnt]=1LL*(m-size[son[cnt][0]])*val;
              tag[cnt]=0;
              sum+=1LL*(m-size[cnt]+1)*val;
              tag1(son[cnt][1],val);
              break;
            }
            if(t)w-=size[son[x][0]]+1;
            x=son[x][t];
          }
          if(len<m){
            len++;
            return;
          }
          x=root;
          while(1){
            pb(x);
            if(son[x][1])x=son[x][1];else break;
          }
          splay(x);
          sum-=v[x];
          root=son[x][0];
          f[root]=0;
        }
        ll get(){return len<m?-inf:sum;}
      }pre,suf;
      inline bool check(int l,int r){
        if(r-l+1<m*2)return 0;
        while(last+m<=r){
          pre.append(a[last]);
          f[last]=pre.get();
          last++;
        }
        suf.init();
        for(int i=r;i-m>=l;i--){
          suf.append(a[i]);
          if(i<=r-m+1&&f[i-1]+suf.get()>=lim)return 1;
        }
        return 0;
      }
      inline void solve(){
        int l=1;
        while(l<=n){
          int bound=n-l+1;
          if(bound<m*2)break;
          pre.init();
          last=l;
          int low=m*2;
          int high=m*2;
          while(1){
            if(l+low-1+m*2>n){
              if(check(l,n))cut++;
              return;
            }
            if(check(l,l+high-1))break;
            else{
              if(high==bound)return;
              low=high+1;
              high=min(high*2,bound);
            }
          }
          int fin=high--;
          while(low<=high){
            int mid=(low+high)/2;
            if(check(l,l+mid-1))high=(fin=mid)-1;else low=mid+1;
          }
          cut++;
          l+=fin;
        }
      }
      int main(){
        ios_base::sync_with_stdio(0);cin.tie(0);
        cin>>n>>m>>lim;
        for(i=1;i<=n;i++)cin>>a[i];
        solve();
        cout<<cut;
      }
      

        

      L. Nailoongs Always Lie

      #include<bits/stdc++.h>
      #define ll long long
      using namespace std;
       
      const int maxn = 210000;
       
      int n;
      int a[maxn];
      int vis[maxn],insta[maxn];
      int t[maxn],tp;
      int incir[maxn];
      vector<int>E[maxn];
      vector<int>V[maxn]; int vn;
       
      void go(const int x)
      {
      	if(insta[x])
      	{
      		++vn;
      		int la=0;
      		while(la!=x)
      		{
      			la=t[tp--];
      			insta[la]=0;
      			V[vn].push_back(la);
      			incir[la]=1;
      		}
      		return;
      	}
      	if(vis[x]) return;
      	vis[x]=1;
      	t[++tp]=x;
      	insta[x]=1;
      	go(a[x]);
      }
      int f[maxn][2];
      void dp(const int x)
      {
      	f[x][0]=0,f[x][1]=1;
      	for(auto y:E[x]) if(!incir[y])
      	{
      		dp(y);
      		f[x][0]+=max(f[y][0],f[y][1]);
      		f[x][1]+=f[y][0];
      	}
      }
       
      int g[2][2],ng[2][2];
       
      int main()
      {
      	ios_base::sync_with_stdio(false);
      	
      	cin>>n;
      	for(int i=1;i<=n;i++) 
      	{
      		cin>>a[i];
      		E[a[i]].push_back(i);
      	}
      	
      	for(int i=1;i<=n;i++) if(!vis[i])
      	{
      		while(tp) insta[t[tp--]]=0;
      		go(i);
      	}
      	
      	int ans=0;
      	for(int i=1;i<=vn;i++)
      	{
      		const auto &Vi= V[i];
      		for(auto x:Vi)
      			dp(x);
      		
      		g[0][0]= f[Vi[0]][0];
      		g[0][1]=g[1][0]= -n;
      		g[1][1]= f[Vi[0]][1];
      		
      		for(int j=1;j< (int)Vi.size();j++)
      		{
      			int x=Vi[j];
      			for(int k=0;k<2;k++)
      			{
      				ng[k][0]=max(g[k][0]+f[x][0], g[k][1]+f[x][0]);
      				ng[k][1]=g[k][0]+f[x][1];
      			}
      			memcpy(g,ng,sizeof g);
      		}
      		
      		int cc=-n;
      		for(int u=0;u<2;u++) for(int v=0;u+v<2;v++)
      			cc=max(cc, g[u][v]);
      		ans+=cc;
      	}
      	cout<<ans<<endl;
      	
      	return 0;
      }
      

        

      M. Master of Both VII

      #include<bits/stdc++.h>
      using namespace std;
       
      int qry(int u,int v)
      {
          cout<<"? "<<u<<" "<<v<<endl;
          int r;
          cin>>r;
          if(r==-1)
              exit(0);
          return r;
      }
       
      signed main()
      {
          int T;
          cin>>T;
          while(T--)
          {
              int n;
              cin>>n;
              stack<int> st;
              vector<pair<int,int> >ans;
              for(int i=3;i<=n-1;i++)
              {
                  int w=qry(1,i);
                  if(w==0)
                  {
                      ans.push_back({1,i});
                      while(st.size())
                          ans.push_back({st.top(),i}),st.pop();
                  }
                  else
                  {
                      int d=w-st.size();
                      if(d>0) 
                      {
                          for(int j=1;j<=d;j++)
                              st.push(i-1);
                      }
                      else
                      {
                          for(int j=1;j<=-d;j++)
                              ans.push_back({st.top(),i}),st.pop();
                      }
                  }
              }
              while(st.size())
                  ans.push_back({st.top(),n}),st.pop();
              cout<<"!";
              for(auto [x,y]:ans)
                  cout<<" "<<x<<" "<<y;
              cout<<endl;
              int r;
              cin>>r;
              if(r!=1)
                  return 0;
          }
      }
      

        

      posted @ 2025-08-10 17:20  Claris  閱讀(76)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 成全我在线观看免费第二季| 亚洲一区二区中文字幕| 欧美国产日韩在线三区| 黄色三级亚洲男人的天堂| 亚洲熟妇自偷自拍另类| 潮喷失禁大喷水无码| 黄又色又污又爽又高潮| 黄色三级亚洲男人的天堂| 国产午夜福利视频合集| 久久亚洲精品中文字幕| 欧美激情内射喷水高潮| 久久精品国产最新地址| 国产裸体美女视频全黄| 亚洲一本二区偷拍精品| 性动态图无遮挡试看30秒| 欧美视频专区一二在线观看| 一二三三免费观看视频| 日本免费一区二区三区日本| 久久综合伊人77777| 中文熟妇人妻av在线| 国产成人亚洲日韩欧美| 日韩福利片午夜免费观着| 精品久久久久无码| 人人妻人人做人人爽夜欢视频| 国产精品一区二区三区三级| 亚洲人成网站18禁止无码| 未满十八18禁止免费无码网站 | 最近中文字幕国产精选| 高颜值午夜福利在线观看| 久久精品A一国产成人免费网站| 亚洲国产日韩一区三区| 亚洲乱码一二三四区国产| 色 亚洲 日韩 国产 综合 | 国产精品久久久福利| 无码av不卡免费播放| 一区二区中文字幕久久| 欧美性猛交xxxx免费看| 日韩人妻少妇一区二区三区| 又黄又爽又色的少妇毛片| 成人午夜免费一区二区三区| 精品尤物TV福利院在线网站|