Cod sursa(job #2285214)

Utilizator vladsirbu23Vlad Sirbu vladsirbu23 Data 18 noiembrie 2018 12:18:33
Problema Trie Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.67 kb
#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,m,q,a[2600][2600],cod,v[2600][2600];
void upd(int pozi,int pozj,int val)
{
    int i,j;
    for(i=pozi;i<=n;i+=i&(-i))
    {
        for(j=pozj;j<=m;j+=j&(-j))
        {
            a[i][j]+=val;
        }
    }
}
int que(int pozi,int pozj)
{
    int i,j,s=0;
    for(i=pozi;i>=1;i-=i&(-i))
    {
        for(j=pozj;j>=1;j-=j&(-j))
        {
            s=s+a[i][j];
        }
    }
    return s;
}
int main()
{
    int val,r1,c1,r2,c2,rmin,cmin,rmax,cmax,i,j;
    cin>>n>>m>>q;
    srand(time(NULL));
    for(i=1; i<=q; i++)
    {
        cin>>cod>>r1>>c1>>r2>>c2;
        if(cod==1)
        {
            rmin=min(r1,r2);
            rmax=r1+r2-rmin;
            cmin=min(c1,c2);
            cmax=c1+c2-cmin;
            val=rand()*rand();
            v[rmin][cmin]=val;
            upd(rmin,cmin,val);
            upd(rmin,cmax+1,-val);
            upd(rmax+1,cmin,-val);
            upd(rmax+1,cmax+1,val);
        }
        else
        {
            if(cod==2)
            {
                rmin=min(r1,r2);
            rmax=r1+r2-rmin;
            cmin=min(c1,c2);
            cmax=c1+c2-cmin;
            val=v[rmin][cmin];
            upd(rmin,cmin,-val);
            upd(rmin,cmax+1,val);
            upd(rmax+1,cmin,val);
            upd(rmax+1,cmax+1,-val);
            }
            else
            {
                if(que(r1,c1)==que(r2,c2))
                    cout<<"Yes\n";
                else
                    cout<<"No\n";
            }
        }
    }
}