分块90分。 By AutSky_JadeK 【重点在下面】

 #include<cstdio>
#include<cmath>
using namespace std;
#define N 1000001
#define INF 2147483647
#define min(a,b) (((a)<(b))?(a):(b))
int n,m,a[N],sum,sz,l[],r[],minv[],delta[],num[N],x,y,v;
int ans,re2;
int Res;char C;
inline int G()
{
Res=;C='*';
while(C<''||C>'')C=getchar();
while(C>=''&&C<=''){Res=Res*+(C-'');C=getchar();}
return Res;
}
void makeblock()
{
sz=(int)sqrt((double)n*0.1); if(!sz) sz=;
for(sum=;sum*sz<n;sum++)
{
l[sum]=r[sum-]+; r[sum]=sum*sz;
minv[sum]=INF;
for(int i=l[sum];i<=r[sum];i++) {minv[sum]=min(minv[sum],a[i]); num[i]=sum;}
}
l[sum]=r[sum-]+; r[sum]=n;
minv[sum]=INF;
for(int i=l[sum];i<=r[sum];i++) {minv[sum]=min(minv[sum],a[i]); num[i]=sum;}
}
inline void work(const int &L,const int &R)
{
minv[num[L]]=INF;
for(int i=L;i<=R;i++) a[i]-=v;
for(int i=l[num[L]];i<=r[num[L]];i++) minv[num[L]]=min(minv[num[L]],a[i]);
}
inline void update()
{
if(num[x]==num[y]) work(x,y);
else
{
work(x,r[num[x]]); work(l[num[y]],y);
for(int i=num[x]+;i<num[y];i++) delta[i]-=v;
}
}
inline int query()
{
ans=INF;
if(num[x]==num[y]) {for(int i=x;i<=y;i++) ans=min(ans,a[i]+delta[num[x]]); }
else
{
for(int i=x;i<=r[num[x]];i++) ans=min(ans,a[i]+delta[num[x]]);
for(int i=num[x]+;i<num[y];i++) ans=min(ans,minv[i]+delta[i]);
for(int i=l[num[y]];i<=y;i++) ans=min(ans,a[i]+delta[num[y]]);
} return ans;
}
int main()
{
n=G(); m=G();
for(int i=;i<=n;i++) a[i]=G();
makeblock();
for(int i=;i<=m;i++)
{
v=G(); x=G(); y=G();
if(query()<v)
{
printf("-1\n%d\n",i);
return ;
}
else update();
}
puts("");
return ;
}

分块 常数优化 100分。 By faebdc 金牌爷の力Orzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 #include<cstdio>
#include<cmath>
using namespace std;
#define N 1000001
#define INF 2147483647
int n,m,a[N],sum,sz,hf,l[],r[],minv[],delta[],num[N],x,y,v;
int ans,re2;
int Res;char C;
inline int G()
{
Res=;C='*';
while(C<''||C>'')C=getchar();
while(C>=''&&C<=''){Res=(Res<<)+(Res<<)+C-'';C=getchar();}
return Res;
}
void makeblock()
{
sz=(int)sqrt((double)n*0.125); if(!sz) sz=;
hf=sz>>;
for(sum=;sum*sz<n;sum++)
{
l[sum]=r[sum-]+; r[sum]=sum*sz;
minv[sum]=INF;
for(int i=l[sum];i<=r[sum];i++) {if(minv[sum]>a[i])minv[sum]=a[i]; num[i]=sum;}
}
l[sum]=r[sum-]+; r[sum]=n;
minv[sum]=INF;
for(int i=l[sum];i<=r[sum];i++) {if(minv[sum]>a[i])minv[sum]=a[i]; num[i]=sum;}
}
inline void work(const int &L,const int &R)
{
int *t=&(minv[num[L]]);
*t=INF;
int *z;
for(int i=L,*z=a+i;i<=R;i++,z++) {*z-=v;if(*t>*z)*t=*z;}
for(int i=r[num[L]],*z=a+i;i>R;i--,z--) if(*t>*z)*t=*z;
for(int i=l[num[L]],*z=a+i;i<L;i++,z++) if(*t>*z)*t=*z;
}
inline int update()
{
if(num[x]==num[y]) {work(x,y);return minv[num[x]]+delta[num[x]];}
work(x,r[num[x]]); work(l[num[y]],y);
int z;
if(minv[num[x]]+delta[num[x]]>minv[num[y]]+delta[num[y]])
z=minv[num[y]]+delta[num[y]];
else
z=minv[num[x]]+delta[num[x]];
for(int i=num[x]+;i<num[y];i++) {delta[i]-=v;if(z>minv[i]+delta[i])z=minv[i]+delta[i];}
return z;
}
int main()
{
n=G(); m=G();
for(int i=;i<=n;i++) a[i]=G();
makeblock();
for(int i=;i<=m;i++)
{
v=G(); x=G(); y=G();
int z=update();
if(z<)
{
printf("-1\n%d\n",i);
return ;
}
}
puts("");
return ;
}

最新文章

  1. jsTree简单应用Demo
  2. 精灵方向移动问题[math.floor]
  3. c++怎样让函数返回数组
  4. DB监控-redis监控
  5. mysql-2 mysql客户端
  6. 解决ScrollView嵌套ListView,ListView填充容器后,界面自动滚动回顶部的问题
  7. 最全面的jdbcUtils,总有一种适合你
  8. SqlSever基础 len函数 计算前后都有空格的字符串的长度时
  9. C++调用父类的构造函数规则
  10. 纯CSS3大转盘抽奖(响应式、可配置)
  11. 细谈Linux和windows差异之图形化用户接口、命令行接口
  12. 彻底解决android读取中文txt的乱码(自动判断文档类型并转码
  13. [java小笔记] 关于数组内存管理的理解
  14. [topcoder]BestRoads
  15. change buffer
  16. Javascript中正则表达式的全局匹配模式
  17. [ZJOI 2006]超级麻将
  18. 第四十一篇-android studio 关闭自动保存功能
  19. Spring Boot(十三)RabbitMQ安装与集成
  20. 关于Mui严格模式下的报错解决方案

热门文章

  1. 如何取消PPT中的动画效果
  2. Android百度定位API的使用
  3. 使用Word2010发布博客文章
  4. Java输入输出流备忘
  5. [洛谷P1541] 乌龟棋
  6. saltstack入门至放弃之salt安装部署
  7. Ansible在节点间传输文件
  8. vue 数组、对象 深度拷贝和赋值
  9. 【转】Linux Futex的设计与实现
  10. 【python】正则表达式相关