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

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

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

      Oct 12

      這一次純純的什么想法都沒有,只好打了一大堆暴力。

      T1

      loj 5459

      這個很神秘了......

      我們維護一個點最右邊 a 不同和 b 不同,\(O(n)\) 不難去做,記錄為 \(nxta[i],nxtb[i]\)

      對于每個詢問,進行如下的判斷。

      1. 是否存在,也就是左端點的 \(nxta[l]\)\(nxtb[l]\) 是不是小于等于 \(r\)

      2. 檢查 \(nxta[l]\)\(l\) 的 b 是不是不同的,合理就取。

      3. 檢查 \(nxtb[l]\)\(l\) 的 a 是不是不同的,合理就取。

      4. 剩下的情況就是直接使用 nxta[l] 和 nxtb[l] 就行了。

      非常巧妙的思想。

      代碼↓

      點擊查看代碼
      //this is a tang problem
      //Why i did not came up with that?
      #include <bits/stdc++.h>
      #define getchar getchar_unlocked
      using namespace std;
      const int MN=1e6+116;
      int n, k, a[MN], b[MN], nxta[MN], nxtb[MN];
      inline int read(){
          int x=0,f=1;
          char ch=getchar();
          while(ch<'0'||ch>'9'){
              if(ch=='-') f=-1;
              ch=getchar();
          }
          while(ch>='0'&&ch<='9')
              x=x*10+ch-'0',ch=getchar();
          return x*f;
      }
      void write(int x){
          if(x<0) putchar('-'),x=-x;
          if(x>9) write(x/10);
          putchar(x%10+'0');
          return;
      }
      void Read(){
      	n=read(); for(int i=1; i<=n; ++i) a[i]=read(), b[i]=read();
      	int posa=1;
      	for(int i=1; i<=n; ++i){
      		posa=max(posa,i);
      		while(a[posa]==a[i]&&posa<=n) ++posa;
      		nxta[i]=posa;
      	}
      	int posb=1;
      	for(int i=1; i<=n; ++i){
      		posb=max(posb,i);
      		while(b[posb]==b[i]&&posb<=n) ++posb;
      		nxtb[i]=posb;
      	}
      }
      int main(){
      	Read(); k=read();
      	while(k--){
      		int l, r; l=read(); r=read();
      		if(nxta[l]>r||nxtb[l]>r){
      			write(0); putchar(' '); write(0); putchar('\n');
      		}else if(b[nxta[l]]!=b[l]){
      			write(l); putchar(' '); write(nxta[l]); putchar('\n');
      		}else if(a[nxtb[l]]!=a[l]){
      			write(l); putchar(' '); write(nxtb[l]); putchar('\n');
      		}else{
      			write(nxta[l]); putchar(' '); write(nxtb[l]); putchar('\n');
      		}
      	}
      	return 0;
      }
      

      T2

      P4616

      神秘題。

      發現可以轉化成一個數連倍數,其它邊都是不必要的。

      建成一棵樹。

      求中途邊權最大,倍增可做。

      代碼↓

      點擊查看代碼
      //This is a very good T2
      //i kinda like it
      //however i only have 60pts
      #include <bits/stdc++.h>
      using namespace std;
      const int MN=3e5+116;
      struct Node{
      	int nxt, to, w;
      }node[MN];
      int head[MN], tottt;
      void insert(int u, int v, int w){
      	node[++tottt].to=v;
      	node[tottt].w=w;
      	node[tottt].nxt=head[u];
      	head[u]=tottt; return;
      }
      int jump[MN][26], father[MN];
      int tmp[MN][26], n, m, q;
      int find(int x){
      	if(father[x]!=x) father[x]=find(father[x]);
      	return father[x];
      }
      void merge(int x, int y){
      	x=find(x), y=find(y);
      	if(x==y) return;
      	father[x]=y; return;
      }
      int depth[MN], lg[MN];
      void dfs(int u, int father, int w){
      	jump[u][0]=father; tmp[u][0]=w;
      	depth[u]=depth[father]+1;
      	for(int i=1; i<=25; ++i){
      		jump[u][i]=jump[jump[u][i-1]][i-1];
      		tmp[u][i]=max(tmp[u][i-1],tmp[jump[u][i-1]][i-1]);
      	}
      	for(int i=head[u];i;i=node[i].nxt){
      		int v=node[i].to;
      		if(v==father) continue;
      		dfs(v,u,node[i].w);
      	}
      }
      int Lca(int x, int y){
      	int res=0;
      	if(depth[x]<depth[y]) swap(x,y);
      	while(depth[x]!=depth[y]){
      		res=max(res,tmp[x][lg[depth[x]-depth[y]]]);
      		x=jump[x][lg[depth[x]-depth[y]]];
      	}
      	if(x==y) return res;
      	for(int i=25; i>=0; --i){
      		if(jump[x][i]!=jump[y][i]){
      			res=max(res,max(tmp[x][i],tmp[y][i]));
      			x=jump[x][i], y=jump[y][i];
      		}
      	}
      	return max(res,max(tmp[x][0],tmp[y][0]));
      }
      void solve(){
      	cin>>n>>m>>q; lg[0]=-1;
      	for(int i=1; i<MN; ++i) lg[i]=lg[i>>1]+1;
      	for(int i=0; i<MN; ++i) father[i]=i;
      	memset(tmp,0x3f,sizeof(tmp));
      	for(int i=m; i>=1; --i){
      		for(int j=i*2,u,v; j<=n; j+=i){
      			u=find(i), v=find(j);
      			if(u==v) continue;
      			merge(u,v);
      			insert(i,j,m-i+1);
      			insert(j,i,m-i+1);
      		}
      	}
      	dfs(1,0,0);
      	for(int i=1; i<=q; ++i){
      		int u, v; cin>>u>>v;
      		cout<<Lca(u,v)<<'\n';
      	}
      }
      int main(){
      	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
      	solve();
      	return 0;
      }
      
      posted @ 2025-10-12 17:12  BaiBaiShaFeng  閱讀(4)  評論(0)    收藏  舉報
      Sakana Widget右下角定位
      主站蜘蛛池模板: 亚洲日韩久热中文字幕| 蜜臀av久久国产午夜| 97se亚洲国产综合自在线观看| 吉川爱美一区二区三区视频| 国精品91人妻无码一区二区三区| 少妇无套内谢免费视频| 人妻丰满熟妇av无码区| 男同精品视频免费观看网站| 精品无码成人片一区二区| 97人妻精品一区二区三区| 2021国产在线视频| jlzz大jlzz大全免费| 亚洲天堂成人一区二区三区| 香港特级三A毛片免费观看| 午夜福利偷拍国语对白| 国产高颜值不卡一区二区| 色哟哟网站在线观看| 国产成人一卡2卡3卡四卡视频| 亚洲国产精品综合久久2007| 少妇无码一区二区三区免费| 人妻精品人妻无码一区二区三区| 中文字幕人妻精品在线| 泰宁县| 伊人久久大香线蕉av色婷婷色| 中文字幕无码中文字幕有码a| 色色97| 久久精品国产精品第一区| 国产成人精品一区二区秒拍1o | 国产精品99区一区二区三| 国产乱人激情H在线观看| 国产精品国产精品偷麻豆| 中文字幕人妻av12| 99热这里有精品| 中文字幕乱妇无码av在线| 女人的天堂A国产在线观看| 亚洲成a∨人片在线观看不卡| 久久精品色一情一乱一伦| 国内精品无码一区二区三区| 91福利视频一区二区| 久久热这里只有精品66| 色九九视频|