六一儿童节题解QAQ

原创 2016年06月01日 14:57:14

T1:
有n种方块,每种方块有权值和个数。
每次寻找区间[l,r]的权值范围在[a,b]的方块中,选k个搭积木。
问每个积木的最大的权值最小是多少。
n,m<=30000
题解:
问最大的权值最小不就是……
排个序之后的第k个,就是最大的最小权值了啊……
然后所以我们考虑这个东西不就是有权值范围限制的第k大吗……
这不是裸的可持久化线段树吗……
随便搞搞就好了。

#include <algorithm>
#include <cstdio>
#include <cstring>
#define Rep(i,n) for(int i = 1;i <= n;i ++)
#define u t[x]
#define o t[y]
#define mid (l + r >> 1)
#define lson u.lc,l,mid
#define rson u.rc,mid + 1,r
using namespace std;
const int N = 30005;
const int NN = ((1 << 30) - 5);
int tot = 0,n,m,ql,qr,qwl,qwr,K,rt[N];
struct Seg{int lc,rc,cnt;}t[N << 5];
void Ins(int &x,int l,int r,int val,int ct,int y)
{
    if(!x)x = ++ tot;
    u.cnt = o.cnt;
    u.cnt += ct;
    if(l == r)return;
    if(val <= mid)Ins(lson,val,ct,o.lc),u.rc = o.rc;
    else Ins(rson,val,ct,o.rc),u.lc = o.lc;
}
int Qry_val(int x,int l,int r,int y)
{
    if(l >= qwl && r <= qwr)
        return u.cnt - o.cnt;
    int a1 = 0,a2 = 0;
    if(qwl <= mid)a1 = Qry_val(lson,o.lc);
    if(mid < qwr)a2 = Qry_val(rson,o.rc);
    return a1 + a2;
}
int Qry(int x,int l,int r,int y)
{
    if(l == r)return l;
    int Now = t[u.lc].cnt - t[o.lc].cnt;
    if(Now < K)return K -= Now,Qry(rson,o.rc);
    else return Qry(lson,o.lc);
}
int main ()
{
    freopen("building.in","r",stdin);
    freopen("building.out","w",stdout);
    scanf("%d",&n);
    Rep(i,n)
    {
        int a,b;
        scanf("%d%d",&a,&b);
        Ins(rt[i],1,NN,a,b,rt[i - 1]);
    }
    scanf("%d",&m);
    Rep(i,m)
    {
        scanf("%d%d%d%d%d",&ql,&qr,&qwl,&qwr,&K);
        int cpt = Qry_val(rt[qr],1,NN,rt[ql - 1]); 
        if(cpt < K){puts("-1");continue;}
        swap(qwl,qwr),qwl = 1,qwr --;
        int cpp;
        if(qwl > qwr)cpp = 0;
        else cpp = Qry_val(rt[qr],1,NN,rt[ql - 1]); 
        K = cpp + K;
        printf("%d\n",Qry(rt[qr],1,NN,rt[ql - 1]));
    }
    return 0;
}

T2:
给一个点带权有向图,每个点有花费,你需要选择一些点,使得拆掉这些点之后,不能从入度为0的点到达出度为0的点。
求最小的花费总和。
n<=1000,m<=6000
题解:
炸了。
T3:
给一个数列,数列相当于一条彩带,可以选择把数列的某个位置x切开,拼接a[x,n]和a[1,x - 1]。
求拼接之后的最小字典序的数列。
例子:4 3 2 1
答案:1 4 3 2
题解:
最小表示法。
我们用两个指针去扫,假设:
s[i - > i + k - 1] == s[j - > j + k - 1]
s[i + k] > s[j + k]
则:
考虑i有没有可能是最终答案:
显然不可能对吧,因为从j开始就比i优。
那么i + 1可不可能是最终答案呢?
显然j + 1比i + 1还要优。
所以s[i + k + 1]之后的才有可能作为最终答案。
我们就直接把i跳到i + k + 1的部分就成了。
总的复杂度显然是O(n)的。

#include <cstdio>
#include <cstring>
#define Rep(i,n) for(int i = 1;i <= n;i ++)
using namespace std;
int s[300005],n;
int Get(int *a)
{
    int i = 1,j = 2,k = 0,len = n;
    while(i <= n && j <= n && k <= n)
    {
        if(k == n)return i;
        if(i == j)j ++;
        int ni = i + k,nj = j + k;
        if(ni > len)ni -= len;
        if(nj > len)nj -= len;
        if(a[ni] > a[nj])i += k + 1,k = 0;
        else if(a[nj] > a[ni])j += k + 1,k = 0;
        else k ++;
    }
    return i;
}
int main ()
{
    freopen("work.in","r",stdin);
    freopen("work.out","w",stdout);
    scanf("%d",&n);
    Rep(i,n)scanf("%d",&s[i]);
    int pos = Get(s);
    for(int i = pos;i <= n;i ++)
        printf("%d ",s[i]);
    for(int i = 1;i < pos;i ++)
        printf("%d ",s[i]);
    puts("");
    return 0;
}

T3死因:后缀数组写不出来,水不过。

版权声明:呐,转载请交稿费QAQ(*随意转载啦)

相关文章推荐

六一儿童节的礼物:基于GB18030-2000汉字拼音类库(C++)

开发工具: Visual Studio v2010 Windows SDK v7.1 版本历史: V1.0 2011年5月30日 实现GB18030-2000汉字拼音模块。 ...
  • jhqin
  • jhqin
  • 2011年05月30日 22:02
  • 1502

六一儿童节的礼物:基于GB18030-2000汉字拼音类库(C#)

开发工具:Visual Studio v2010.NET Framework 4 Client Profile版本历史:V1.0 2011年5月24日实现GB18030-2000汉字拼音模块。功能描述...
  • jhqin
  • jhqin
  • 2011年05月24日 20:36
  • 2097

(六一儿童节篇)渐行渐远的儿时游戏

渐行渐远的儿时游戏 又是六一儿童节,偶想起了曾经美好的童年,儿时的游戏。 这是曾经乡村孩子们的儿童游戏。 1.滚铁环 一个大大铁丝绕成的圈子,还有带手柄钩子,用他滚着铁环去上学,放学归来。 ...

关于一个sql,六一儿童节快乐~

*查询test表中lotetype字段中有且只有两个相同的记录,且这两条记录中的date_time时间间隔为十分钟,取其中的一条作为结果输出。 表: CREATE TABLE `test` (...

你知道六一儿童节起源于希特勒制造的大屠杀吗?

​    ​六一国际儿童节是为了保障世界各国儿童的生存权,保健权和受教育权,抚养权。为了改善儿童的生活,为了反对虐杀儿童和毒害儿童而设立的节日。目前世界上许多国家都将6月1日定为儿童的节日。    ​...

大学生网页制作(六一儿童节)

  • 2012年11月28日 11:54
  • 11.94MB
  • 下载

[洛谷模板大赛]题解 模板整理QAQ

题目地址:NOIP RP++题目描述不用说,都是交模板就能AC的,昨晚就A了4个题因为时间不太够了…… 最近也想整理模板,看到这么个模板大赛自然是把持不住辣~ 除了T2平衡树不会做之外其他的都可以...

儿童节亲子靠它啦~

儿童节亲子靠它啦~六一儿童节就要来啦,各位宝妈宝爸们是否为带娃到哪玩?给娃买什么礼物?今年六一怎么安排而烦呢?极乐君给你推荐8款小程序,解决你的问题。 1、父母邦精选 父母邦快乐亲子生活,...

SynEdit Studio v2005.06.01 儿童节大礼包

  • 2006年01月13日 09:51
  • 1.42MB
  • 下载

六一啊喔额61aoe识字免费版

  • 2012年10月17日 10:09
  • 9.36MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:六一儿童节题解QAQ
举报原因:
原因补充:

(最多只允许输入30个字)