cogs2320.[hzoi2015]聪聪的世界

A_LEAF A_LEAF     2022-09-13     261

关键词:

solution

6 7 8都好说

对于1 2 3 4只需自己yy一个函数就行

(ps:我把L打成l....)

技术分享
  1 #include<cstdio>
  2 #include<iostream>
  3 #include<cstring>
  4 #define ll long long
  5 using namespace std;
  6 const int N=1000006;
  7 inline ll maxn(ll a,ll b){return a>b?a:b;}
  8 inline ll minn(ll a,ll b){return a<b?a:b;}
  9 
 10 int n,m;
 11 ll v[N];
 12 struct son
 13 {
 14     ll max,min;
 15 };
 16 son a[N*5];
 17 ll ji[N*5];
 18 void pushup(int x)
 19 {
 20     a[x].max=maxn(a[x<<1].max,a[x<<1|1].max);
 21     a[x].min=minn(a[x<<1].min,a[x<<1|1].min);
 22 }
 23 void pushdown(int x)
 24 {
 25     if(ji[x])
 26     {
 27         ji[x<<1]+=ji[x];
 28         ji[x<<1|1]+=ji[x];
 29         a[x<<1].max+=ji[x];
 30         a[x<<1].min+=ji[x];
 31         a[x<<1|1].min+=ji[x];
 32         a[x<<1|1].max+=ji[x];
 33         ji[x]=0;
 34     }
 35 }
 36 void build(int l,int r,int x)
 37 {
 38     if(l==r)
 39     {
 40         a[x].min=a[x].max=v[l];
 41         return ;
 42     }
 43     int mid=(l+r)>>1;
 44     build(l,mid,x<<1);
 45     build(mid+1,r,x<<1|1);
 46     pushup(x);
 47 }
 48 void addqu(int L,int R,ll c,int l,int r,int x)
 49 {
 50     if(L<=l&&r<=R)
 51     {
 52         a[x].max+=c;
 53         a[x].min+=c;
 54         ji[x]+=c;
 55         return ;
 56     }
 57     pushdown(x);
 58     int mid=(l+r)>>1;
 59     if(L<=mid)
 60       addqu(L,R,c,l,mid,x<<1);
 61     if(mid<R)
 62       addqu(L,R,c,mid+1,r,x<<1|1);
 63     pushup(x);
 64 }
 65 void adddian(int pos,ll c,int l,int r,int x)
 66 {
 67     if(l==r)
 68     {
 69         a[x].min+=c;
 70         a[x].max+=c;
 71         return ;
 72     }
 73     int mid=(l+r)>>1;
 74     pushdown(x);
 75     if(pos<=mid)
 76       adddian(pos,c,l,mid,x<<1);
 77     else
 78       adddian(pos,c,mid+1,r,x<<1|1);
 79     pushup(x);
 80 }
 81 ll qq(int pos,int l,int r,int x)
 82 {
 83     if(l==r)
 84       return a[x].max;
 85     pushdown(x);
 86     int mid=(l+r)>>1;
 87     if(pos<=mid)
 88       return qq(pos,l,mid,x<<1);
 89     else
 90       return qq(pos,mid+1,r,x<<1|1);
 91 }
 92 void Swap(int posx,int posy)
 93 {
 94     ll valx=qq(posx,1,n,1),valy=qq(posy,1,n,1);
 95     adddian(posx,valy-valx,1,n,1);
 96     adddian(posy,valx-valy,1,n,1);
 97 }
 98 ll zuoxiao(int L,int R,ll c,int l,int r,int x)
 99 {
100     if(L<=l&&r<=R&&a[x].min>c)
101       return -1;
102     if(l==r)
103         return a[x].max<c?a[x].max:-1;
104     int mid=(l+r)>>1;
105     ll temp;
106     pushdown(x);
107     if(R>mid)
108     {
109       temp=zuoxiao(L,R,c,mid+1,r,x<<1|1);
110       return temp==-1?zuoxiao(L,R,c,l,mid,x<<1):temp;
111     }
112     else
113       return zuoxiao(L,R,c,l,mid,x<<1);
114 }
115 ll zuoda(int L,int R,ll c,int l,int r,int x)
116 {
117     if(L<=l&&r<=R&&a[x].max<c)
118       return -1;
119     if(l==r)
120         return a[x].max>c?a[x].max:-1;
121     int mid=(l+r)>>1;
122     ll temp;
123     pushdown(x);
124     if(R>mid)
125     {
126       temp=zuoda(L,R,c,mid+1,r,x<<1|1);
127       return temp==-1?zuoda(L,R,c,l,mid,x<<1):temp;
128     }
129     else
130       return zuoda(L,R,c,l,mid,x<<1);
131 }
132 ll youxiao(int L,int R,ll c,int l,int r,int x)
133 {
134     if(L<=l&&r<=R&&a[x].min>c)
135       return -1;
136     if(l==r)
137         return a[x].max<c?a[x].max:-1;
138     int mid=(l+r)>>1;
139     ll temp;
140     pushdown(x);
141     if(L<=mid)
142     {
143       temp=youxiao(L,R,c,l,mid,x<<1);
144       return temp==-1?youxiao(L,R,c,mid+1,r,x<<1|1):temp;
145     }
146     else
147       return youxiao(L,R,c,mid+1,r,x<<1|1);
148 }
149 ll youda(int L,int R,ll c,int l,int r,int x)
150 {
151     if(L<=l&&r<=R&&a[x].max<c)
152       return -1;
153     if(l==r)
154         return a[x].max>c?a[x].max:-1;
155     int mid=(l+r)>>1;
156     ll temp;
157     pushdown(x);
158     if(L<=mid)
159     {
160       temp=youda(L,R,c,l,mid,x<<1);
161       return temp==-1?youda(L,R,c,mid+1,r,x<<1|1):temp;
162     }
163     else
164       return youda(L,R,c,mid+1,r,x<<1|1);
165 }
166 int main(){
167     //freopen("1.txt","r",stdin);
168     freopen("ccsworld.in","r",stdin);
169     freopen("ccsworld.out","w",stdout);
170     scanf("%d%d",&n,&m);
171     for(int i=1;i<=n;++i)
172       scanf("%lld",&v[i]);
173     
174     build(1,n,1);
175     while(m--)
176     {
177         int kk;
178         int x,y;
179         ll w;
180         scanf("%d%d",&kk,&x);
181         if(kk==1)printf("%lld
",zuoxiao(1,x,qq(x,1,n,1),1,n,1));
182         else if(kk==2)printf("%lld
",zuoda(1,x,qq(x,1,n,1),1,n,1));
183         else if(kk==3)printf("%lld
",youxiao(x,n,qq(x,1,n,1),1,n,1));
184         else if(kk==4)printf("%lld
",youda(x,n,qq(x,1,n,1),1,n,1));
185         else if(kk==5){scanf("%d",&y);Swap(x,y);}
186         else if(kk==6){scanf("%d%lld",&y,&w);addqu(x,y,w,1,n,1);}
187         else if(kk==7){scanf("%d%lld",&y,&w);addqu(x,y,-w,1,n,1);}
188     }
189     //while(1);
190     return 0;
191 }
code

 

cogs2123.[hzoi2015]glassbeads

2123.[HZOI2015]GlassBeads★★★  输入文件:MinRepresentations.in  输出文件:MinRepresentations.out   简单对比时间限制:1s  内存限制:1024MB【题目描述】给定长度为n(n<=300000)的循环同构的字符串,定义... 查看详情

[cogs2258][hzoi2015]复仇的序幕曲

Description你还梦不梦痛不痛,回忆这么重你怎么背得动----序言当年的战火硝烟已经渐渐远去,可仇恨却在阿凯蒂王子的心中越来越深他的叔父三年前谋权篡位,逼宫杀死了他的父王,用铁血手腕平定了国内所有的不满只有他一个... 查看详情

cogs2287[hzoi2015]疯狂的机器人

【题目描述】现在在二维平面内原点上有一只机器人他每次操作可以选择向右走,向左走,向下走,向上走和不走(每次如果走只能走一格)但是由于本蒟蒻施展的大魔法,机器人不能走到横坐标是负数或者纵坐标是负数的点上... 查看详情

cogs2479hzoi2016—偏序

http://cogs.pro/cogs/problem/problem.php?pid=2479 (题目链接)题意  四维偏序。Solution  CDQ套CDQ。细节  第二次分治不能直接按照mid分离两类数了。代码//cogs2479#include<algorithm>#include<iostream>#include<cstdlib>#in 查看详情

cogs2478.[hzoi2016]简单的最近公共祖先

2478.[HZOI2016]简单的最近公共祖先★☆  输入文件:easy_LCA.in  输出文件:easy_LCA.out   简单对比时间限制:2s  内存限制:128MB【题目描述】 给定一棵有n个节点的有根树,根节点为1,每个节点有... 查看详情

cogs2478.[hzoi2016]简单的最近公共祖先

2478.[HZOI2016]简单的最近公共祖先★☆  输入文件:easy_LCA.in  输出文件:easy_LCA.out   简单对比时间限制:2s  内存限制:128MB【题目描述】 给定一棵有n个节点的有根树,根节点为1,每个节点有... 查看详情

cogs2334.[hzoi2016]最小函数值

时间限制:1s  内存限制:128MB【题目描述】有n个函数,分别为F1,F2,...,Fn。定义Fi(x)=Aix2+Bix+Ci(x∈N∗)。给定这些Ai、Bi和Ci,请求出所有函数的所有函数值中最小的m个(如有重复的要输出多个)。【输入格式】第一行... 查看详情

四边形不等式cogs1658-[hzoi2014]合并石子

【题目大意】在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。 试设计出1个算法,计算出将N堆石子合并成1堆的最小得... 查看详情

[cogs2421][hzoi2016]简单的treap笛卡尔树

笛卡尔树就是你给两维限制,一维堆R,一维二叉搜索树K,平地拔起一棵Treap,最广范的应用:用LCA求区间最值,建Treap,还有个什么范围topk我表示并不会查都查不到。它最妙最高的地方在于用栈来建树:我们可以先排序K然后一... 查看详情

cogs2479.[hzoi2016]偏序[cdq分治套cdq分治四维偏序]

传送门 给定一个有n个元素的序列,元素编号为1~n,每个元素有三个属性a,b,c,求序列中满足i<j且ai<aj且bi<bj且ci<cj的数对(i,j)的个数。 对于100%的数据,1<=n<=50000,保证所有的ai、bi、ci分别组成三个1~n的排列。&... 查看详情

hzoi2015帕秋莉的超级多项式(代码片段)

题面题目分析超级模板题:多项式乘法多项式求逆多项式开根多项式求导多项式求积分多项式求对数多项式求自然对数为底的指数函数多项式快速幂代码实现#include<iostream>#include<cstring>#include<cmath>#include<algorithm>... 查看详情

cogs1224.[shoi2002]百事世界杯之旅(期望概率)

COGS1224.[SHOI2002]百事世界杯之旅★  输入文件:pepsi.in  输出文件:pepsi.out   简单对比 时间限制:1s  内存限制:128MB 【问题描述】 “……在2002年6月之前购买的百事任何饮料的瓶盖上都... 查看详情

聪聪归来!

时隔半年,我又捡起了我的博客园,准备记录点什么东西,好记性不如烂笔头,对于面向对象的语言来说,把方法封装起来或者做成dll保存起来,后续在使用的时候会轻松很多。程序员不能老想着用自己的脑子记住所有的方法,... 查看详情

[国家集训队]聪聪可可(代码片段)

Description聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃、两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好了,可是他们已经... 查看详情

bzoj2152聪聪可可

2152:聪聪可可TimeLimit: 3Sec  MemoryLimit: 259MBSubmit: 3915  Solved: 2015[Submit][Status][Discuss]Description聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃、两个人... 查看详情

cogs2104.[noip2015]神奇的幻方

★  输入文件:2015magic.in  输出文件:2015magic.out  简单对比时间限制:1s  内存限制:256MB1#include<iostream>2#include<cstdio>3inta[41][41];4intmain()5{6freopen("2015magic.i 查看详情

cogs2104.[noip2015]神奇的幻方

★  输入文件:2015magic.in  输出文件:2015magic.out   简单对比时间限制:1s  内存限制:256MB 模拟一开始数组开小了。。屠龙宝刀点击就送#include<cstdio>intn,h[1600],l[1600],hf[45][45];intmain() 查看详情

ac日记——[noip2015]运输计划cogs2109

[NOIP2015]运输计划 思路:  树剖+二分; 代码:#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>usingnamespacestd;#definemaxn300005#defineINF0x7fffffffintn,deep[m 查看详情