思维数学+treap——icpc 2019 nwerc
Posted zsben991126
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了思维数学+treap——icpc 2019 nwerc相关的知识,希望对你有一定的参考价值。
要求构造一棵treap,其结点的(key,priority)要求为(x,sinx),且这棵treap的高度是n,所有x都为整数
根据treap的特性,将问题转化为构造一个pair<x,sinx>序列,要求x递增,sinx也递增
当sinx很小时,sinx=x,即接近线性,那么我们找到一个能满足sinx1=x1的整数点x1,(x1,sinx1)作为序列第一个点
再把(2x1,sin2x1)作为序列第二个点...依次类推,就可以构造出这个序列
问题在于x1要多小才能满足这个要求?
枚举[1..5e4]范围的sinx,把最小的x找到就行,
5e4*2e4<=1e9,x满足int范围
#include <bits/stdc++.h> #define P pair<double,int> using namespace std; int main(){ int n; cin>>n; vector<P> v; vector<int> vv; for(int i=1;i<=50000;i++) if(sin(i)>0) v.push_back(P(sin(i),i)); sort(v.begin(),v.end()); for(int i=-25000;i<=25000;i++){ vv.push_back(i*v[0].second); sort(vv.begin(),vv.end()); for(int i=0;i<n;i++) printf("%d ",vv[i]); }
以上是关于思维数学+treap——icpc 2019 nwerc的主要内容,如果未能解决你的问题,请参考以下文章
2019 ICPC 南昌 K. Tree(树上启发式合并,平衡树 treap)