【Mail.Ru Cup 2018 Round 2 B】 Alice and Hairdresser
阿新 • • 發佈:2018-11-14
【連結】 我是連結,點我呀:)
【題意】
【題解】
因為只會增加。
所以。
一開始暴力算出來初始答案
每次改變一個點的話。
就只需要看看和他相鄰的數字的值就好。
看看他們是不是大於l
分情況增加、減少答案就好
【程式碼】
#include <bits/stdc++.h> #define LL long long #define lson l,mid,rt<<1 #define rson mid+1,r,rt<<1|1 #define rep1(i,a,b) for (int i = a;i <= b;i++) #define rep2(i,a,b) for (int i = a;i >= b;i--) using namespace std; const int N = 1e5; int n,m,l; int ans; LL a[N+10]; int main(){ scanf("%d%d%d",&n,&m,&l); rep1(i,1,n) scanf("%lld",&a[i]); rep1(i,1,n) if(a[i]>l){ int j = i; while (j+1<=n && a[j+1]>l) j++; ans++; i = j; } rep1(i,1,m){ int ope; scanf("%d",&ope); if (ope==0){ printf("%d\n",ans); }else{ int pos,delta; scanf("%d%d",&pos,&delta); if (a[pos]<=l && a[pos]+delta>l){ int ll,rr; if (a[pos-1]>l) ll = 1;else ll = 0; if (a[pos+1]>l) rr = 1;else rr = 0; if (ll>0 && rr>0){ ans--; }else{ if (ll==0 && rr==0){ ans++; }else{ } } } a[pos]+=delta; } } return 0; }