博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj2288 生日礼物 (线段树)
阅读量:4982 次
发布时间:2019-06-12

本文共 1980 字,大约阅读时间需要 6 分钟。

我当然想选最大的子段和啦 但要选M次 那不一定就是最好的

所以提供一个反悔的选项,我选了一段以后,就把它们乘个-1,然后再选最好的(类似于网络流的思路)

这个可以用线段树来维护,记一个区间包含左端点/右端点的最大值、最小值(因为要乘-1),还有它们的端点位置

然后一直找 直到最大值<=0

1 #include
2 #define pa pair
3 #define CLR(a,x) memset(a,x,sizeof(a)) 4 #define mp make_pair 5 using namespace std; 6 typedef long long ll; 7 const int maxn=1e5+10,inf=0x3f3f3f3f; 8 9 inline ll rd(){10 ll x=0;char c=getchar();int neg=1;11 while(c<'0'||c>'9'){
if(c=='-') neg=-1;c=getchar();}12 while(c>='0'&&c<='9') x=x*10+c-'0',c=getchar();13 return x*neg;14 }15 struct Pos{16 int v,l,r;17 Pos (int a=0,int b=0,int c=0){v=a,l=b,r=c;}18 };19 struct Node{20 Pos lmas,rmas,lmis,rmis,ma,mi,sum;21 }tr[maxn<<2];22 23 bool laz[maxn<<2];24 int N,M,v[maxn];25 26 bool operator <(Pos a,Pos b){27 return a.v
>1;51 build(p<<1,l,m),build(p<<1|1,m+1,r);52 tr[p]=tr[p<<1]+tr[p<<1|1];53 }54 }55 56 void deal(int p){57 laz[p]^=1;58 Pos t=tr[p].lmas;59 tr[p].lmas=-tr[p].lmis;tr[p].lmis=-t;60 t=tr[p].rmas;61 tr[p].rmas=-tr[p].rmis;tr[p].rmis=-t;62 t=tr[p].ma;63 tr[p].ma=-tr[p].mi;tr[p].mi=-t;64 tr[p].sum=-tr[p].sum;65 }66 67 inline void pushdown(int p){68 if(!laz[p]) return;69 deal(p<<1),deal(p<<1|1);70 laz[p]=0;71 }72 73 inline void rever(int p,int l,int r,int x,int y){74 if(x<=l&&r<=y) deal(p);75 else{76 pushdown(p);77 int m=l+r>>1;78 if(x<=m) rever(p<<1,l,m,x,y);79 if(y>=m+1) rever(p<<1|1,m+1,r,x,y);80 tr[p]=tr[p<<1]+tr[p<<1|1];81 }82 }83 84 int main(){85 //freopen("","r",stdin);86 int i,j,k;87 N=rd(),M=rd();88 for(i=1;i<=N;i++)89 v[i]=rd();90 int ans=0;91 build(1,1,N);92 for(i=1;i<=M;i++){93 Pos x=tr[1].ma;if(x.v<=0) break;94 ans+=x.v;95 rever(1,1,N,x.l,x.r);96 }97 printf("%d\n",ans);98 return 0;99 }

 

转载于:https://www.cnblogs.com/Ressed/p/9887280.html

你可能感兴趣的文章
CentOS 7 单用户模式修改root密码
查看>>
Linux DHCP原理
查看>>
Thread.currentThread()和this的区别——《Java多线程编程核心技术》
查看>>
mysql 5.1 Data 文件夹路径
查看>>
delegate的参数也可泛型【简单源码示例】
查看>>
Mycat SqlServer 技术栈 实现 主从分离
查看>>
为何要学编程?如何学编程?用什么语言最好?有什么好书?
查看>>
剑指Offer的学习笔记(C#篇)-- 反转链表
查看>>
Android精品资源整理2018年3月21日 星期三
查看>>
查询当前库中包含某个字段并且包含自增的表
查看>>
SSH整合报错:No result defined for action and result input
查看>>
1963-带妹子去看电影
查看>>
数据结构和算法之栈排序
查看>>
HBASE的预分区设计
查看>>
大道至简第三章读后感
查看>>
java中JDK、JRE、JVM的关系
查看>>
mybatis面试常见题
查看>>
EXCEL转html
查看>>
对象和XML之间的序列化和反序列化
查看>>
cSELECT
查看>>