Advertisement
Guest User

Untitled

a guest
Dec 16th, 2014
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.54 KB | None | 0 0
  1. #include<iostream>
  2. #include<stdio.h>
  3. #include<algorithm>
  4. #include<set>
  5. #include<map>
  6. #include<queue>
  7. #include<stack>
  8. #include<deque>
  9. #include<vector>
  10. #include<string>
  11. #include<math.h>
  12. using namespace std;
  13.  
  14. #define INF 1000000001
  15. #define lint long long
  16. #define pb push_back
  17. #define mp make_pair
  18. #define MOD 1000000007
  19.  
  20. int kabs(int a)
  21. {
  22.     if(a<0)return -a;
  23.     return a;
  24. }
  25.  
  26. int t[270005],ts[270005];
  27. void updatem(int v,int val)
  28. {
  29.     t[v]=val;
  30.     v/=2;
  31.     while(v)
  32.     {
  33.         t[v]=t[2*v];
  34.         if(t[2*v+1]>t[v])
  35.             t[v]=t[2*v+1];
  36.         v/=2;
  37.     }
  38. }
  39.  
  40. void update(int v,int val)
  41. {
  42.     ts[v]=val;
  43.     v/=2;
  44.     while(v)
  45.     {
  46.         ts[v]=ts[2*v]+ts[2*v+1];
  47.         v/=2;
  48.     }
  49. }
  50.  
  51. int getm(int v,int l,int r,int li,int ri)
  52. {
  53.     if(li>r || ri<l) return -INF;
  54.     if(li>=l && ri<=r) return t[v];
  55.     int a1=getm(2*v,l,r,li,(li+ri)/2),
  56.         a2=getm(2*v+1,l,r,(li+ri)/2+1,ri);
  57.     return max(a1,a2);
  58. }
  59.  
  60. int get(int v,int l,int r,int li,int ri)
  61. {
  62.     if(li>r || ri<l) return 0;
  63.     if(li>=l && ri<=r) return ts[v];
  64.     int a1=get(2*v,l,r,li,(li+ri)/2),
  65.         a2=get(2*v+1,l,r,(li+ri)/2+1,ri);
  66.     return a1+a2;
  67. }
  68.  
  69. int x[100005],y[100005],n;
  70. int a[100005],b[100005];
  71.  
  72. int calc(int i)
  73. {
  74.     if(i==1 || i==n) return a[i]=-INF;
  75.     return a[i]=kabs(x[i]-x[i+1])+kabs(y[i]-y[i+1])+kabs(x[i]-x[i-1])+kabs(y[i]-y[i-1])-kabs(x[i-1]-x[i+1])-kabs(y[i-1]-y[i+1]);
  76. }
  77.  
  78. int calcd(int i)
  79. {
  80.     if(i==n)return b[i]=0;
  81.     return b[i]=kabs(x[i]-x[i+1])+kabs(y[i]-y[i+1]);
  82. }
  83. int main()
  84. {
  85.     freopen("marathon.in","r",stdin);
  86.     freopen("marathon.out","w",stdout);
  87.     int m,i,p=1;
  88.  
  89.     scanf("%d %d",&n,&m);
  90.  
  91.     for(i=1;i<=n;++i)
  92.     {
  93.         scanf("%d %d",&x[i],&y[i]);
  94.     }
  95.     for(i=1;i<=n;++i)
  96.     {
  97.         calc(i);
  98.         calcd(i);
  99.     }
  100.     while(p<n)
  101.         p*=2;
  102.  
  103.     for(i=p;i<p+n;++i)
  104.     {
  105.         ts[i]=b[i-p+1];
  106.         t[i]=a[i-p+1];
  107.     }
  108.     for(i=p+n;i<p+p;++i)
  109.         t[i]=-INF;
  110.     for(i=p-1;i>0;--i)
  111.     {
  112.         ts[i]=ts[2*i]+ts[2*i+1];
  113.         t[i]=max(t[2*i],t[2*i+1]);
  114.     }
  115.  
  116.  
  117.     while(m--)
  118.     {
  119.         char c;
  120.         scanf(" %c",&c);
  121.         if(c=='U')
  122.         {
  123.             int ind;
  124.             scanf("%d",&ind);
  125.             scanf("%d %d",&x[ind],&y[ind]);
  126.             if(ind!=1)
  127.                 update(p+ind-2,calcd(ind-1));
  128.             if(ind!=n)
  129.                 update(p+ind-1,calcd(ind));
  130.  
  131.             if(ind!=1)
  132.                 updatem(p+ind-2,calc(ind-1));
  133.             updatem(p+ind-1,calc(ind));
  134.             if(ind!=n)
  135.                 updatem(p+ind,calc(ind+1));
  136.  
  137.         }
  138.         else
  139.         {
  140.             int l,r;
  141.             scanf("%d %d",&l,&r);
  142.             if(r==l)
  143.                 printf("0\n");
  144.             else if(r==l+1)
  145.                 printf("%d\n",ts[l+p-1]);
  146.             else
  147.             {
  148.                 int pr=get(1,p+l-1,p+r-2,p,p+p-1)-getm(1,p+l,p+r-2,p,p+p-1),pr1=get(1,p+l-1,p+r-2,p,p+p-1);
  149.                 if(pr1<pr)pr=pr1;
  150.                 printf("%d\n",pr);
  151.             }
  152.         }
  153.     }
  154.     return 0;
  155. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement