首页 > 其他分享 >题解:「GLR-R3」雨水

题解:「GLR-R3」雨水

时间:2022-08-24 18:15:47浏览次数:93  
标签:下标 R3 int 题解 ull k4 GLR

题解:「GLR-R3」雨水

题目链接

前言

先吐槽一下,这个英文是真的坑。

const int MAXN = 712; // Set a right value according to your solution.

为啥不能直接把数组下标设为最大值呢,还要挖个坑考考英文。

然后这个随机数据卡不掉 $O(n^2)$ 做法啊,感觉大为震撼。

正文

更简化的题意

给定一个序列 $A$,从中选取下标单调递增的一些数,相邻的两两交换,但仅局限于下标为奇数的和它右边的数这样交换,再放回原序列,使得新得到的序列字典序尽可能小。

解题

一道很不错的贪心,对于字典序最小,假设我们只能换一次,那肯定将整个序列里面最小的那个数换到最前面。推广到多次操作,再交换的数肯定只能从最小的那个数右边去找,否则不符合操作规则。

对于如果有多个最小的数,我们应该交换哪一个呢?因为字典序尽可能小,同样可以推出大的应该尽可能往后放,因此在寻找最小的数时,要找下标更大的。

由此我们可以倒序跑一遍记录下对于每一个数它的右侧的最小值,再正着跑一遍进行交换操作,这样的总时间复杂度就是 $O(n)$。

答案自然溢出即可。

Code

#include<bits/stdc++.h>
#define ull unsigned long long
#define MAX 10000002
#define INF 999999999
using namespace std;

int n,a[MAX];

namespace Generator
{
	ull k1,k2;
	int thres;
	inline ull xorShift128Plus()
	{
		ull k3=k1,k4=k2;
		k1=k4,k3^=(k3<<23),k2=k3^k4^(k3>>17)^(k4>>26);
		return k2+k4;
	}
	inline void generate()
	{
		for(int i=1;i<=n;i++)
			a[i]=xorShift128Plus()%thres;
	}
}

unsigned int key[MAX],pos[MAX];
ull ans;
inline void work()
{
	key[n+1]=INF;
	for(int i=n;i>=2;i--)
	{
		key[i]=key[i+1],pos[i]=pos[i+1];
		if(a[i]<key[i]) key[i]=a[i],pos[i]=i;
	}
	int mink,minp;
	for(int i=1;i<n;i++)
	{
		mink=key[i+1],minp=pos[i+1];
		if(mink<a[i]) swap(a[i],a[minp]),i=minp;
	}
	return;
}

int main()
{
	scanf("%d",&n);
	scanf("%llu %llu %d",&Generator::k1,&Generator::k2,&Generator::thres);
	Generator::generate();
	work();
	for(int i=1;i<=n;i++)
		ans+=(unsigned long long)a[i]*i;
	cout<<ans;
	return (0-0);
}

标签:下标,R3,int,题解,ull,k4,GLR
From: https://www.cnblogs.com/LittleTwoawa/p/16621110.html

相关文章

  • 题解:【TJOI2012】防御
    【TJOI2012】防御题目链接小清新数据结构题,题解区为啥清一色两棵线段树。考虑分块,维护两个数组:$tag$和$minx$分别记录整块的累计伤害和当前护盾最小值。当发现有护盾......
  • 题解:【THUSCH2017】 大魔法师
    【THUSCH2017】大魔法师题目链接前言线段树和矩阵乘法的板子拼接题,这个题题目本身思维难度不大,但是可以给我们提供许多平时写代码的底层优化技巧。题目思路首先回到......
  • 题解:【POI2001】Goldmine
    【POI2001】Goldmine题目链接扫描线板子题,本质上这个题跟窗口的星星是一样的,只不过把权值$k$都换成$1$就行。但是需要注意的是这句话:(若矿石位于这块地的边缘,我们同......
  • 数的划分 题解
    \(0.\)写在前面1.3【例题1】数的划分-TuringEDUP2706数的划分-TopsCoding这题可以有两种写法:(至少两种)深搜计数\(\text{DP}\)接下来将会依次讲解\(1.\)......
  • 题解:【WC2005】双面棋盘
    【WC2005】双面棋盘题目链接这天做双面棋盘这道题,发现题解里面大多都是LCT,对于线段树套并查集的写法思路讲评很少而且不大清晰,因此有了这一篇题解。维护联通块的数量,......
  • has been blocked by CORS policy跨域问题解决
    title:hasbeenblockedbyCORSpolicy跨域问题解决我们在前端调用接口时,浏览器有时候会报错:XXXXformXXXXXhasbeenblockedbyCORSpolicy:No'Access-Control-......
  • CF1715F Crop Squares 题解
    CF1715FCropSquaressolution有一个\(n\timesm\)的长方形,四个角的坐标分别为$(0,0)$,$(0,m)$,$(n,0)$,$(n,m)$。在长方形里面有一个\(1\time......
  • CF838D题解
    很厉害的题。考虑将原本的座位串成一个环,然后加一个节点在\(1\)的前面\(n\)的后面。原问题等价为新节点不被座到的方案数。容易发现所有节点被座到和不被座到的方案......
  • 关于npm ERR! ERESOLVE could not resolve 问题解决
    1、问题描述从代码仓库拉取代码到本地,执行npminstall命令安装项目依赖,提示如下图错误  问题出现的原因由于npm版本问题,npm不同版本库之间命令不兼容。解决办法:执......
  • # Chapter3. 仲裁器专题
    Chapter3.仲裁器专题本专题内容总结自李虹江老师的IC加油站公众号,李老师的讲的内容十分精彩,除了仲裁器还包括异步FIFO、跨时钟域处理,讲的十分透彻,受益匪浅。FixedPri......