Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int N = 1e5 + 10;
- using lli = long long;
- const lli PB = 98765431;
- lli fw[N], qs[N], hsh[N];
- int ar[N];
- int n;
- lli Sum(int pst, lli sum = 0){
- for(int i=pst;i>=1;i-=i&-i)
- sum += fw[i];
- return sum;
- }
- void Update(int pst, lli val){
- for(int i=pst;i<=n;i+=i&-i)
- fw[i] += val;
- }
- lli RangeSum(int s, int e){
- return Sum(e) - Sum(s - 1);
- }
- int main(){
- int k;
- scanf("%d %d", &n, &k);
- lli p = 1;
- for(int i=1;i<=n;i++){
- p = p * PB;
- hsh[i] = i * p;
- qs[i] = qs[i - 1] + hsh[i];
- Update(i, hsh[i]);
- }
- for(int i=1;i<=k;i++){
- int opr, s, e;
- scanf("%d %d %d", &opr, &s, &e);
- s ++, e ++;
- if(opr == 0){
- lli curs = RangeSum(s, s);
- lli cure = RangeSum(e, e);
- Update(s, -curs);
- Update(e, -cure);
- Update(e, curs);
- Update(s, cure);
- }
- else if(opr == 1){
- if(qs[e] - qs[s - 1] == RangeSum(s, e)) printf("YES\n");
- else printf("NO\n");
- }
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment