zoukankan      html  css  js  c++  java
  • 【思维】数学+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]);
    }
  • 相关阅读:
    MVC中使用jquery的浏览器缓存问题
    3 工厂方法模式
    2 简单工厂模式
    1 单例模式
    Sqlserver With as
    Memcache的使用
    mysql的分区和分表
    MySQL主从复制与读写分离
    SqlServer 表分区
    SqlServer 2012 AlwaysOn
  • 原文地址:https://www.cnblogs.com/zsben991126/p/12958289.html
Copyright © 2011-2022 走看看