码迷,mamicode.com
首页 > 其他好文 > 详细

【分块】洛谷 P1083 借教室

时间:2014-11-05 09:09:16      阅读:377      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   ar   for   sp   div   on   

分块90分。

 1 #include<cstdio>
 2 #include<cmath>
 3 using namespace std;
 4 #define N 1000001
 5 #define INF 2147483647
 6 #define min(a,b) (((a)<(b))?(a):(b))
 7 int n,m,a[N],sum,sz,l[8001],r[8001],minv[8001],delta[8001],num[N],x,y,v;
 8 int ans,re2;
 9 int Res;char C;
10 inline int G()
11 {
12     Res=0;C=*;
13     while(C<0||C>9)C=getchar();
14     while(C>=0&&C<=9){Res=Res*10+(C-0);C=getchar();}
15     return Res;
16 }
17 void makeblock()
18 {
19     sz=(int)sqrt((double)n*0.1); if(!sz) sz=1;
20     for(sum=1;sum*sz<n;sum++)
21       {
22         l[sum]=r[sum-1]+1; r[sum]=sum*sz;
23         minv[sum]=INF;
24         for(int i=l[sum];i<=r[sum];i++) {minv[sum]=min(minv[sum],a[i]); num[i]=sum;}
25       }
26     l[sum]=r[sum-1]+1; r[sum]=n;
27     minv[sum]=INF;
28     for(int i=l[sum];i<=r[sum];i++) {minv[sum]=min(minv[sum],a[i]); num[i]=sum;}
29 }
30 inline void work(const int &L,const int &R)
31 {
32     minv[num[L]]=INF;
33     for(int i=L;i<=R;i++) a[i]-=v;
34     for(int i=l[num[L]];i<=r[num[L]];i++) minv[num[L]]=min(minv[num[L]],a[i]);
35 }
36 inline void update()
37 {
38     if(num[x]==num[y]) work(x,y);
39     else
40       {
41         work(x,r[num[x]]); work(l[num[y]],y);
42         for(int i=num[x]+1;i<num[y];i++) delta[i]-=v;
43       }
44 }
45 inline int query()
46 {
47     ans=INF;
48     if(num[x]==num[y]) {for(int i=x;i<=y;i++) ans=min(ans,a[i]+delta[num[x]]); }
49     else
50       {
51         for(int i=x;i<=r[num[x]];i++) ans=min(ans,a[i]+delta[num[x]]);
52         for(int i=num[x]+1;i<num[y];i++) ans=min(ans,minv[i]+delta[i]);
53         for(int i=l[num[y]];i<=y;i++) ans=min(ans,a[i]+delta[num[y]]);
54       } return ans;
55 }
56 int main()
57 {
58     n=G(); m=G();
59     for(int i=1;i<=n;i++) a[i]=G();
60     makeblock();
61     for(int i=1;i<=m;i++)
62       {
63         v=G(); x=G(); y=G();
64         if(query()<v)
65           {
66             printf("-1\n%d\n",i);
67             return 0;
68           }
69         else update();
70       }
71     puts("0");
72     return 0;
73 }

【分块】洛谷 P1083 借教室

标签:style   blog   io   color   ar   for   sp   div   on   

原文地址:http://www.cnblogs.com/autsky-jadek/p/4075340.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!