呃呃 原地进步也算进步是吧

我wa了半天代码,然后翻了题解
#include <iostream>
#include <vector> 
#include <assert.h>
#include <algorithm>
#define int long long

using namespace std;

const int N = 1e5 + 12;
typedef pair<int, int> pii;

int n;
int arr[N];

int idx = 0;
struct node
{
	int fr, sc;
	int len;
	bool operator < (const node &p) const
	{
		if (len != p.len) return len > p.len;
		return fr < p.fr;
	}
}p[N], tmp;

vector<node> vec;

inline int read()
{
	int res=0, bol=1;
	char ch = getchar();
	
	while (!isdigit(ch))
	{
		if (ch == '-') bol *= -1;
		ch = getchar();
	}
	
	while (isdigit(ch))
	{
		res = res*10 + ch-'0';
		ch = getchar();
	}
	
	return res*bol;
}

signed main()
{
	int T = read();
	
	while (T -- )
	{
		n = read();
		for (int i=1;i <= n;i ++ ) cin >> arr[i];
	
		idx = 0;
		vec.clear();
//		int pi = 1, pj = 1;
//		while (pj <= n)
//		{
//			// 不下降的 可以走 
//			while (pj+1 <= n && arr[pj] <= arr[pj+1]) pj ++;
//			
//			if (pi^pj) p[idx ++ ] = {pi, pj, arr[pj]-arr[pi]};
//			
//			pj ++ , pi = pj;
//		}
		
		/*--------------------------*/
		int l = 1;
		for(int i=2;i<=n;i++)
		{
            if(arr[i]<arr[i-1])
			{
				tmp = {l, i-1, arr[i-1]-arr[l]};
				vec.push_back(tmp);
                l = i;
            }
        }
        tmp = {l, n, arr[n]-arr[l]};
   //     vec.push_back(tmp);
        sort(vec.begin(), vec.end());
        
        for(int i=0;i<vec.size();i++)
		{
            if(vec[i].len == vec[0].len)
				cout << vec[i].fr << " "<< vec[i].sc <<" ";
        }
        cout<<'\n';
		/*--------------------------*/
//		sort(p, p+idx);
//
//		int len = p[0].len;
//		for (int i=0;i < idx && p[i].len == len;i ++ )
//			printf("%lld %lld ", p[i].fr, p[i].sc);
//		printf("\n");
	}
	
	
	return 0;
}
调的时候我发现
assert(vec.size() == idx); // 必定报错 

// 没有报错
for (int i=0;i < idx && p[i].len == len;i ++ )
{
	node now = vec[i];
	if (now.fr != p[i].fr || now.sc != p[i].sc || now.len != p[i].len) assert(false); 
    printf("%lld %lld ", p[i].fr, p[i].sc);
}
这时候我就发现, 好家伙, 还有我没找到的区间吗
于是我注意到这段代码
tmp = {l, n, arr[n]-arr[l]}; // 题解里的
vec.push_back(tmp);

// 对应我的code
if (pi^pj) p[idx ++ ] = {pi, pj, arr[pj]-arr[pi]};
然后我把if 删掉
于是就有了

好家伙,l==r 也算, 宁隔着虚空进步是吧(



全部评论

相关推荐

不愿透露姓名的神秘牛友
11-21 11:29
已编辑
斯卡蒂味的鱼汤:知道你不会来数马,就不捞你😂最近数马疯狂扩招,招聘要求挺低的,你能力肯定够,应该就是因为太强了,知道你不会来才不捞你
投递腾讯云智研发等公司7个岗位
点赞 评论 收藏
分享
陌夏微秋:一线城市25w左右吧,17×15=255
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务