求助,给关注
  • 板块题目总版
  • 楼主rainfox
  • 当前回复12
  • 已保存回复12
  • 发布时间2024/7/24 14:25
  • 上次更新2024/7/24 15:19:51
查看原帖
求助,给关注
1033626
rainfox楼主2024/7/24 14:25

题目

题目描述
给定一个长度为 
n 的序列 
a,有 
q 次询问,每次询问一段区间 
[l,r],判断能否选出三个不同的下标 
(i,j,k),满足以 
(a[i]  ,a[j] ,a[k] ) 为边长,可以构成三角形

输入格式
输入数据有 
q+2 行
第一行两个整数 
n,q
接下来一行 n个正整数,第 
i 个数为 a[i] 
接下来 q 行,每行两个正整数 ,
l,r 保证 1≤l≤r≤n,代表询问区间[l,r]
输出格式
q 行,每行请判定,若判定成功则输出 Triangle

否则输出 Not triangle

输入输出样例
输入 #1复制
5 4
1 3 6 5 26
1 3
2 5
3 5
1 2
输出 #1复制
Not triangle
Triangle
Not triangle
Not triangle

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+5;
int n,m,a[maxn],l[maxn],r[maxn];
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=m;i++)
		cin>>l[i]>>r[i]; 
	for(int i=1;i<=m;i++){
		if(r[i]-l[i]+1<3){
			cout<<"Not triangle"<<endl;
		} 
		else{
			for(int j=l[i];j<=r[i]-2;j++){
				if(a[i]+a[i+1]>a[i+2]){
					if(a[i]+a[i+2]>a[i+1]){
						if(a[i+1]+a[i+2]>a[i]){
							cout<<"Triangle"<<endl;
							break;
						} 
					}
				}	
			}
			cout<<"Not triangle"<<endl;
		}
		continue;
	}
	return 0;
}
2024/7/24 14:25
加载中...